home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 039a / mawk10.zip / PARSE.C < prev    next >
C/C++ Source or Header  |  1991-10-05  |  93KB  |  2,534 lines

  1. #ifndef lint
  2. static char yysccsid[] = "@(#)yaccpar    1.8 (Berkeley) 01/20/90";
  3. #endif
  4. #define YYBYACC 1
  5. #line 52 "parse.y"
  6. #include <stdio.h>
  7. #include "mawk.h"
  8. #include "code.h"
  9. #include "symtype.h"
  10. #include "memory.h"
  11. #include "bi_funct.h"
  12. #include "bi_vars.h"
  13. #include "jmp.h"
  14. #include "field.h"
  15. #include "files.h"
  16.  
  17.  
  18. /* Bison's use of MSDOS and ours clashes */
  19. #undef   MSDOS
  20.  
  21. extern void  PROTO( eat_nl, (void) ) ;
  22. static void  PROTO( resize_fblock, (FBLOCK *, INST *) ) ;
  23. static void  PROTO( code_array, (SYMTAB *) ) ;
  24. static void  PROTO( code_call_id, (CA_REC *, SYMTAB *) ) ;
  25. static int   PROTO( current_offset, (void) ) ;
  26. static void  PROTO( check_id, (SYMTAB *) ) ;
  27. static void  PROTO( check_array, (SYMTAB *) ) ;
  28. static void  PROTO( field_A2I, (void) ) ;
  29.  
  30. static int scope ;
  31. static FBLOCK *active_funct ;
  32.       /* when scope is SCOPE_FUNCT  */
  33.  
  34. #define  code_address(x)  if( is_local(x) )\
  35.                           { code1(L_PUSHA) ; code1((x)->offset) ; }\
  36.                           else  code2(_PUSHA, (x)->stval.cp) 
  37.  
  38. #line 86 "parse.y"
  39. typedef union{
  40. CELL *cp ;
  41. SYMTAB *stp ;
  42. INST  *start ; /* code starting address */
  43. PF_CP  fp ;  /* ptr to a (print/printf) or (sub/gsub) function */
  44. BI_REC *bip ; /* ptr to info about a builtin */
  45. FBLOCK  *fbp  ; /* ptr to a function block */
  46. ARG2_REC *arg2p ;
  47. CA_REC   *ca_p  ;
  48. int   ival ;
  49. } YYSTYPE;
  50. #line 51 "y.tab.c"
  51. #define UNEXPECTED 257
  52. #define BAD_DECIMAL 258
  53. #define NL 259
  54. #define SEMI_COLON 260
  55. #define LBRACE 261
  56. #define RBRACE 262
  57. #define LBOX 263
  58. #define RBOX 264
  59. #define COMMA 265
  60. #define IO_OUT 266
  61. #define P_OR 267
  62. #define P_AND 268
  63. #define ASSIGN 269
  64. #define ADD_ASG 270
  65. #define SUB_ASG 271
  66. #define MUL_ASG 272
  67. #define DIV_ASG 273
  68. #define MOD_ASG 274
  69. #define POW_ASG 275
  70. #define QMARK 276
  71. #define COLON 277
  72. #define OR 278
  73. #define AND 279
  74. #define IN 280
  75. #define MATCH 281
  76. #define NOT_MATCH 282
  77. #define EQ 283
  78. #define NEQ 284
  79. #define LT 285
  80. #define LTE 286
  81. #define GT 287
  82. #define GTE 288
  83. #define CAT 289
  84. #define GETLINE 290
  85. #define PLUS 291
  86. #define MINUS 292
  87. #define MUL 293
  88. #define DIV 294
  89. #define MOD 295
  90. #define NOT 296
  91. #define UMINUS 297
  92. #define IO_IN 298
  93. #define PIPE 299
  94. #define POW 300
  95. #define INC_or_DEC 301
  96. #define DOLLAR 302
  97. #define FIELD 303
  98. #define LPAREN 304
  99. #define RPAREN 305
  100. #define CONSTANT 306
  101. #define RE 307
  102. #define ID 308
  103. #define FUNCT_ID 309
  104. #define BUILTIN 310
  105. #define PRINT 311
  106. #define PRINTF 312
  107. #define SPLIT 313
  108. #define MATCH_FUNC 314
  109. #define SUB 315
  110. #define GSUB 316
  111. #define LENGTH 317
  112. #define DO 318
  113. #define WHILE 319
  114. #define FOR 320
  115. #define BREAK 321
  116. #define CONTINUE 322
  117. #define IF 323
  118. #define ELSE 324
  119. #define DELETE 325
  120. #define BEGIN 326
  121. #define END 327
  122. #define EXIT 328
  123. #define NEXT 329
  124. #define RETURN 330
  125. #define FUNCTION 331
  126. #define YYERRCODE 256
  127. short yylhs[] = {                                        -1,
  128.     0,    0,   46,   46,   46,   47,   49,   47,   50,   47,
  129.    51,   47,   52,   53,   47,    6,    6,   54,    6,   55,
  130.     6,    7,    7,    7,    1,    1,    2,    2,    3,    3,
  131.     4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
  132.     4,    4,    4,    4,    4,    4,   56,   56,   16,   16,
  133.    16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
  134.    16,   16,   16,   16,   57,   16,   58,   16,   59,   60,
  135.    16,   17,   17,   18,   18,   18,   18,   18,   18,   18,
  136.    18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
  137.    13,   35,   35,   36,   36,   11,    5,    8,   37,   37,
  138.     9,    9,   10,   10,   61,   61,   27,   24,   62,   25,
  139.    63,   21,   26,   22,   28,   23,   29,   29,   30,   30,
  140.    16,   16,   13,   18,   18,    4,   32,   31,   14,   14,
  141.    14,   14,   14,   14,   14,   18,   16,   16,   16,   16,
  142.    16,   16,   16,   18,   65,   18,   64,   64,   18,   19,
  143.    19,   18,   33,   33,   34,   34,   18,   18,   18,   18,
  144.    18,   66,   15,   15,   12,   12,   18,   38,   38,   20,
  145.    20,   48,   39,   40,   40,   44,   44,   45,   45,   18,
  146.    41,   41,   42,   42,   42,   43,   43,
  147. };
  148. short yylen[] = {                                         2,
  149.     1,    2,    1,    1,    2,    1,    0,    3,    0,    3,
  150.     0,    3,    0,    0,    6,    1,    1,    0,    4,    0,
  151.     4,    1,    3,    2,    3,    3,    1,    1,    1,    2,
  152.     1,    2,    1,    2,    1,    1,    1,    1,    1,    1,
  153.     1,    2,    2,    1,    1,    2,    1,    1,    1,    3,
  154.     3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
  155.     3,    3,    3,    3,    0,    4,    0,    4,    0,    0,
  156.     7,    1,    2,    1,    1,    3,    3,    3,    3,    3,
  157.     3,    3,    2,    2,    2,    1,    2,    2,    2,    2,
  158.     1,    0,    1,    1,    3,    5,    0,    5,    1,    1,
  159.     1,    3,    3,    3,    0,    2,    4,    2,    1,    4,
  160.     1,    7,    4,    2,    8,    2,    0,    1,    0,    1,
  161.     3,    5,    5,    5,    6,    7,    6,    2,    1,    2,
  162.     6,    4,    2,    3,    2,    1,    3,    3,    3,    3,
  163.     3,    3,    3,    6,    0,    8,    2,    2,    6,    1,
  164.     1,    1,    2,    3,    2,    3,    1,    2,    2,    3,
  165.     4,    1,    1,    1,    2,    3,    6,    1,    1,    1,
  166.     3,    2,    4,    2,    2,    0,    1,    1,    3,    3,
  167.     2,    2,    1,    3,    3,    2,    2,
  168. };
  169. short yydefred[] = {                                      0,
  170.     0,    0,  162,    0,    0,    0,    0,    0,  129,    0,
  171.    74,   22,    0,   97,   97,    0,    0,  168,  169,  152,
  172.     7,    9,    0,    0,    6,    0,   17,   86,    0,    0,
  173.     0,    0,    0,    0,    0,    0,    0,    1,    3,    4,
  174.     0,    5,    0,   47,   48,    0,    0,   99,  100,  111,
  175.     0,    0,    0,    0,    0,    0,    0,    0,    0,   31,
  176.     0,   29,   35,    0,   38,   39,   40,   36,   37,    0,
  177.     0,    0,   41,    0,   44,   45,   97,   33,    0,    0,
  178.     0,    0,    0,    0,    0,   24,    0,    0,    0,   88,
  179.    90,    0,  135,    0,  133,    0,    0,    0,    0,   87,
  180.     0,    0,    0,    0,    0,    0,    0,  174,  175,    2,
  181.    13,   18,   20,    0,    0,    0,    0,    0,    0,    0,
  182.     0,    0,    0,    0,    0,    0,    0,    0,    0,   89,
  183.    69,   65,   67,    0,    0,    0,    0,    0,    0,    0,
  184.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  185.     0,  172,    0,  165,  163,  164,    0,   26,   34,    0,
  186.     0,    0,   42,   43,    0,   97,    0,  153,   46,    0,
  187.   155,    0,   25,   30,   32,  114,    0,  116,  128,    0,
  188.     0,    0,    0,    0,    0,    0,    0,    0,   23,    0,
  189.     0,  134,    0,   76,    0,    0,  180,    0,    0,    0,
  190.     0,    8,   10,    0,    0,    0,   27,   12,   28,    0,
  191.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  192.     0,    0,    0,    0,    0,    0,  121,  150,    0,   63,
  193.    64,   57,   58,   59,   60,   61,   62,    0,    0,    0,
  194.     0,    0,    0,    0,    0,  178,    0,    0,  166,    0,
  195.     0,    0,    0,    0,    0,  154,  156,  109,    0,    0,
  196.     0,    0,  101,    0,    0,    0,    0,  132,    0,    0,
  197.     0,    0,    0,  181,    0,    0,  182,    0,    0,    0,
  198.     0,    0,   21,    0,    0,    0,  161,    0,  173,    0,
  199.   113,    0,    0,  107,    0,  110,    0,    0,    0,    0,
  200.     0,    0,    0,    0,  122,    0,  185,  187,  184,  186,
  201.    96,    0,    0,    0,   70,    0,  179,    0,    0,    0,
  202.     0,    0,    0,   98,    0,    0,    0,  123,  131,  125,
  203.   145,  144,  149,   15,    0,    0,  170,  167,  127,    0,
  204.     0,    0,    0,    0,    0,    0,  126,  112,    0,    0,
  205.   146,  171,  115,  148,  147,
  206. };
  207. short yydgoto[] = {                                      24,
  208.    60,  208,   61,   62,  101,   26,   27,   63,  261,   97,
  209.    28,   29,   30,   31,  157,   64,   33,   34,  230,  338,
  210.    65,   66,   67,   68,   69,   70,   71,   72,  253,  320,
  211.    73,   74,   75,   76,  263,  264,   77,   35,   36,   37,
  212.   197,  198,  277,  247,  248,   38,   39,   40,  106,  107,
  213.   114,  204,  314,  205,  206,   78,  225,  226,  224,  335,
  214.   299,  259,   79,  351,  343,   41,
  215. };
  216. short yysindex[] = {                                     60,
  217.  -249,  272,    0, 2366, 2366, 2254,  -80, -192,    0, 2282,
  218.     0,    0, -280,    0,    0, -272, -269,    0,    0,    0,
  219.     0,    0, -302,   60,    0, -134,    0,    0, 2366, 2149,
  220.   126, 2598, 2366,  -20, -267, -249, -247,    0,    0,    0,
  221.  -195,    0, -172,    0,    0, 2366, 2394,    0,    0,    0,
  222.  -208, -204,  -88,  -88, -202, -284, 1690,  -88, 1690,    0,
  223.   122,    0,    0, 2193,    0,    0,    0,    0,    0,  347,
  224.   347,  347,    0,  347,    0,    0,    0,    0,  347, 2394,
  225.  -280, -236, -120, -120, 2282,    0, -120,  -55,    0,    0,
  226.     0, 2394,    0,    0,    0, -227, -243,  191, 2124,    0,
  227.  -196, -200, -189, 2394, 2394, -249, -249,    0,    0,    0,
  228.     0,    0,    0,    3, -231, 2394, 2394, 2394, 2394, 2394,
  229.  2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394,    0,
  230.     0,    0,    0, -173, 2310, 2310, 2394, 2394, 2394, 2394,
  231.  2394, 2394,  -20, 2366, 2366, 2366, 2366, 2366, -146, 2366,
  232.  2310,    0, -161,    0,    0,    0, -138,    0,    0, 2124,
  233.  2394, 2422,    0,    0, 2394,    0, 2193,    0,    0, 2193,
  234.     0,  -88,    0,    0,    0,    0, -160,    0,    0, 2450,
  235.  -152,  260,  -86,  260, -116,  -71,  335,  -68,    0, 2394,
  236.   -82,    0, 2394,    0, 2394, -104,    0, 2478, 2394, 2548,
  237.  2572,    0,    0, 2282, 2282, 2282,    0,    0,    0, 2598,
  238.  2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598,
  239.  2598, 2598, 2598, 2394, 2394, 2394,    0,    0,  582,    0,
  240.     0,    0,    0,    0,    0,    0,    0,  256,  256, -120,
  241.  -120, -120,  -80, -231,  -54,    0,  -90,  -14,    0, 2208,
  242.  -237, 2598,   35, 2221,  -10,    0,    0,    0,  347, 2394,
  243.    34, 2598,    0,   28,   11, 2394, 2394,    0, 2394, 2598,
  244.    -1, 2598,  -81,    0, -242, 2152,    0,    8,   10, 2310,
  245.   -59,   51,    0, 2585,  188, 2110,    0, 2394,    0,   12,
  246.     0,   15, 2394,    0, 2394,    0, -239, 2394,  -88, 2394,
  247.  2394,  -78,  -24,   -5,    0,   23,    0,    0,    0,    0,
  248.     0, -235,   25,    3,    0, 2180,    0,   29, 2598,   68,
  249.    33,  -82, 2598,    0, 2598, 2236,   23,    0,    0,    0,
  250.     0,    0,    0,    0, 2394,  -80,    0,    0,    0, 2394,
  251.   -88,  -88, 2338, 2598,   30,   32,    0,    0,   41, 2249,
  252.     0,    0,    0,    0,    0,
  253. };
  254. short yyrindex[] = {                                      0,
  255.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  256.     0,    0,  478,    0,    0,    0,    0,    0,    0,    0,
  257.     0,    0,    0,    0,    0,   27,    0,    0,    0,    0,
  258.   773,   17, 1909, 1599,    0,    0,    0,    0,    0,    0,
  259.  1363,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  260.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  261.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  262.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  263.   655,  773,  950, 1009,    0,    0, 1068,    0,  596,    0,
  264.     0,    0,    0,  419,    0,    0,    0, 1850,   36,    0,
  265.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  266.     0,    0,    0,    0, 1127,    0,    0,    0,    0,    0,
  267.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  268.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  269.     0,    0, 1658,    0,    0,    0,    0,    0,    0,    0,
  270.     0,    0,   48,    0,    0,    0,  714,    0,    0,    0,
  271.     0,   78,    0,    0,    0,    0,    0,    0,    0,    0,
  272.     0,    0,    0,    0,    0,    0,  197,    0,    0, -175,
  273.     0,    0,    0,   36,    0,    0,    0,    0,    0,    0,
  274.     0,    0,    0,    0,    0, 2506,    0,    0,   49,    0,
  275.     0,    0,    0,    0,    0,    0,    0,    0,    0,  218,
  276.   293,  368, 1939, 1958, 1972, 1987, 2001, 2020, 2034, 2049,
  277.  2063, 2082, 2096,    0,    0,    0,    0,    0,  -47,    0,
  278.     0,    0,    0,    0,    0,    0,    0, 1481, 1540, 1186,
  279.  1245, 1304, 1422,  832,    0,    0,    0,   50,    0,    0,
  280.  1748, -251,    0,    0,    0,    0,    0,    0,    0,    0,
  281.     6, -213,    0, -256,    0,    0,    0,    0,    0, -232,
  282.     0, -226,    0,    0, 1797,    0,    0,    0,    0,    0,
  283.    31,   66,    0,    0,  143,  -22,    0,    0,    0,    0,
  284.     0,    0,   79,    0,    0,    0,    0,    0,    0,    0,
  285.     0,    0,    0,    0,    0,  537,    0,    0,    0,    0,
  286.     0,    0,    0,    0,    0,    0,    0,    0,   80,    0,
  287.     0,  -84,   46,    0,   83,    0,  891,    0,    0,    0,
  288.     0,    0,    0,    0,    0,    0,    0,    0,    0,   52,
  289.     0,    0,    0, 2111,    0,    0,    0,    0,    0,    0,
  290.     0,    0,    0,    0,    0,
  291. };
  292. short yygindex[] = {                                      0,
  293.    44,   58,    0,  -43,   84,   -2,  359,    0,    0,  119,
  294.     0,    0,   -7,    9, -241,    1,    0,  164, -131,    0,
  295.     0,    0,    0,    0,    0,    0,    0,    0,   40,    0,
  296.     0,    0,    0,    0,  186, -121,    0,    0,    0,    0,
  297.     0,    0,    0,    0,    0,  365,    0,    0,    0,    0,
  298.     0,    0,    0,    0,    0,   18,    0,    0,    0,    0,
  299.     0,    0,    0,    0,    0,    0,
  300. };
  301. #define YYTABLESIZE 2886
  302. short yytable[] = {                                      90,
  303.    32,  287,   93,   93,  231,  108,  109,   96,  118,   93,
  304.    99,    2,   82,   82,   82,   91,   95,  174,   98,  245,
  305.   100,  190,  307,  166,   32,  190,  176,  177,  178,  331,
  306.   179,  104,  104,  155,  105,  181,  151,   82,  103,  112,
  307.   113,   82,  292,   25,   42,   94,   94,  160,   93,  156,
  308.    94,   94,   94,  118,   82,   98,  153,  167,  100,  170,
  309.   159,  191,  308,  100,  130,  322,  195,   25,  150,  332,
  310.   163,  164,  104,  273,  168,  169,  171,  189,  103,  152,
  311.   182,  175,   96,   92,   92,  184,   44,   45,   98,  158,
  312.    92,   94,  187,   98,  345,  161,  185,  102,  103,  162,
  313.    98,  165,  154,  196,  200,  201,    8,    9,   88,    8,
  314.     9,   92,   89,   93,  199,   94,  210,  211,  212,  213,
  315.   214,  215,  216,  217,  218,  219,  220,  221,  222,  223,
  316.   111,  209,  112,  113,  227,  229,  229,  232,  233,  234,
  317.   235,  236,  237,  243,  302,  303,  246,  304,  313,  202,
  318.   203,  229,   82,   82,   82,   82,   82,  207,   82,  249,
  319.   180,  250,  252,  258,  183,  254,  265,   83,   84,   87,
  320.    44,   45,  186,  321,  102,  102,  266,  188,  149,  150,
  321.   262,  102,  306,  300,  256,  327,  300,  257,  192,  159,
  322.   270,  267,  115,  272,  269,  262,  143,  271,  276,  262,
  323.   274,  281,  282,  283,   32,   32,   32,  112,  113,   87,
  324.   288,  151,  151,  151,  289,  296,  151,  151,  151,  151,
  325.   151,    8,    9,   88,  284,  285,  286,   89,  151,  151,
  326.   151,  151,  151,  151,  151,  155,   68,   68,   68,  328,
  327.   300,   68,   68,   68,   68,   68,    8,    9,   88,  255,
  328.   290,  156,  295,   68,   68,   68,   68,  151,  329,  300,
  329.   160,   44,   45,    2,  105,  105,  262,  262,   98,  262,
  330.   144,  145,  146,  147,  148,   16,   16,   16,  149,  150,
  331.   229,   16,   68,   16,   16,   11,   11,   11,  316,   14,
  332.    14,   14,  300,  319,  293,  262,  341,  300,  323,  298,
  333.   325,  326,   16,   16,  106,  106,  305,  238,  239,  240,
  334.   241,  242,  311,  244,  301,    1,  324,  312,  113,  317,
  335.     2,   16,  318,  330,   19,   19,   19,  340,  155,  333,
  336.    19,  209,   19,  339,  352,  344,  353,  117,  119,  120,
  337.   252,   95,   95,  350,  156,  354,   95,   95,   95,    3,
  338.     4,    5,  176,   92,  177,    6,  117,  207,  347,  348,
  339.     7,    8,    9,   10,   86,   11,   12,   13,   14,   15,
  340.    19,  334,   16,   17,   18,   19,   20,  172,  297,  346,
  341.    44,   45,    2,  173,  278,   21,   22,   95,  110,    0,
  342.    23,    0,    0,    0,  123,  124,  125,  126,  127,  128,
  343.   129,   66,   66,   66,    0,    0,   66,   66,   66,   66,
  344.    66,    3,    4,    5,    0,    0,    0,   46,   66,   66,
  345.    66,    0,    7,    8,    9,   47,  130,   11,    0,   13,
  346.    14,   15,   48,   49,   16,   17,   18,   19,   20,   50,
  347.    51,   52,   53,   54,   55,    0,   56,   66,    0,   57,
  348.    58,   59,  108,    0,    0,  108,  108,  108,  108,  123,
  349.   124,  125,  126,  127,  128,  129,  133,  134,  135,  136,
  350.   137,  138,  139,  140,  141,  142,   50,   50,   50,    0,
  351.     0,   50,   50,   50,   50,   50,  108,  108,  108,    0,
  352.     0,  130,  108,    0,   50,  192,    0,  108,  108,  108,
  353.   108,    0,  108,    0,  108,  108,  108,  108,  108,  108,
  354.   108,  108,  108,  108,  108,  108,  108,  108,  108,  108,
  355.     0,  108,   50,    0,  108,  108,  108,   43,    0,    0,
  356.    44,   45,    2,    0,    0,  131,    0,  132,  133,  134,
  357.   135,  136,  137,  138,  139,  140,  141,  142,  146,  147,
  358.   148,   51,   51,   51,  149,  150,   51,   51,   51,   51,
  359.    51,    3,    4,    5,  194,    0,    0,   46,    0,   51,
  360.     0,    0,    7,    8,    9,   47,    0,   11,    0,   13,
  361.    14,   15,   48,   49,   16,   17,   18,   19,   20,   50,
  362.    51,   52,   53,   54,   55,    0,   56,   51,    0,   57,
  363.    58,   59,  172,    0,    0,   44,   45,    2,    0,    0,
  364.   131,    0,  132,  133,  134,  135,  136,  137,  138,  139,
  365.   140,  141,  142,    0,    0,    0,   52,   52,   52,    0,
  366.     0,   52,   52,   52,   52,   52,    3,    4,    5,  268,
  367.     0,    0,   46,    0,   52,    0,    0,    7,    8,    9,
  368.    47,    0,   11,    0,   13,   14,   15,   48,   49,   16,
  369.    17,   18,   19,   20,   50,   51,   52,   53,   54,   55,
  370.     0,   56,   52,    0,   57,   58,   59,  130,  130,  130,
  371.     0,   97,  130,  130,  130,  130,  130,  130,  130,  130,
  372.   130,  130,  130,  130,  130,  130,  130,  130,  130,  130,
  373.   130,  130,  130,  130,  130,  130,  130,    0,  130,  130,
  374.   130,  130,  130,  130,  130,    0,  130,  130,  130,  130,
  375.   130,  130,  130,  130,  130,    0,  130,  130,  130,    0,
  376.     0,  130,  130,  130,  130,  130,   75,   75,   75,    0,
  377.    97,   75,   75,   75,   75,   75,   91,   91,   91,   91,
  378.    91,   91,   91,   75,   75,   75,   75,   75,   75,   75,
  379.    75,   75,   75,   75,   75,   75,    0,   75,   75,   75,
  380.    75,   75,   75,   75,    0,    0,   75,   75,    0,   75,
  381.    75,   75,   75,   75,    0,   75,   75,   75,    0,    0,
  382.    75,   75,   75,   75,   75,  124,  124,  124,    0,    0,
  383.   124,  124,  124,  124,  124,  123,  123,  123,  123,  123,
  384.   123,  123,  124,  124,  124,  124,  124,  124,  124,  124,
  385.   124,  124,  124,  124,  124,    0,  124,  124,  124,  124,
  386.   124,  124,  124,    0,    0,  124,  124,    0,  124,  124,
  387.   124,  124,  124,    0,  124,  124,  124,    0,    0,  124,
  388.   124,  124,  124,  124,   91,   91,   91,    0,   97,   91,
  389.    91,   91,   91,   91,  137,  138,  139,  140,  141,  142,
  390.     0,   91,   91,   91,   91,   91,   91,   91,   91,   91,
  391.    91,   91,   91,   91,    0,   91,   91,   91,   91,   91,
  392.    91,   91,    0,   91,   91,   91,   91,   91,   91,   91,
  393.    91,   91,    0,   91,   91,   91,    0,    0,   91,   91,
  394.    91,   91,   91,   75,   75,   75,    0,   97,   75,   75,
  395.    75,   75,   75,    0,    0,    0,    0,    0,    0,    0,
  396.    75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
  397.    75,   75,   75,    0,   75,   75,   75,   75,   75,   75,
  398.    75,    0,    0,   75,   75,    0,   75,   75,   75,   75,
  399.    75,    0,   75,   75,   75,    0,    0,   75,   75,   75,
  400.    75,   75,  158,  158,  158,    0,    0,  158,  158,  158,
  401.   158,  158,    0,    0,    0,    0,    0,    0,    0,  158,
  402.   158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
  403.   158,  158,    0,  158,  158,  158,  158,  158,  158,  158,
  404.     0,    0,  158,  158,  158,  158,  158,  158,  158,  158,
  405.     0,  158,  158,  158,    0,    0,  158,  158,  158,  158,
  406.   158,  136,  136,  136,    0,    0,  136,  136,  136,  136,
  407.   136,    0,    0,    0,    0,    0,    0,    0,  136,  136,
  408.   136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
  409.   136,    0,  136,  136,  136,  136,  136,  136,  136,    0,
  410.     0,  136,  136,    0,  136,  136,  136,  136,  136,    0,
  411.   136,  136,  136,    0,    0,  136,  136,  136,  136,  136,
  412.    82,   82,   82,    0,    0,   82,   82,   82,   82,   82,
  413.     0,    0,    0,    0,    0,    0,    0,   82,   82,   82,
  414.    82,   82,   82,   82,   82,   82,   82,   82,   82,   82,
  415.     0,   82,   82,   82,   82,   82,   82,   82,    0,    0,
  416.    82,    0,   82,   82,   82,   82,   82,   82,    0,   82,
  417.    82,   82,    0,    0,   82,   82,   82,   82,   82,  124,
  418.   124,  124,    0,    0,  124,  124,  124,  124,  124,    0,
  419.     0,    0,    0,    0,    0,    0,  124,  124,  124,  124,
  420.   124,  124,  124,  124,  124,  124,  124,  124,  124,    0,
  421.   124,  124,  124,  124,  124,  124,  124,    0,    0,  124,
  422.   124,    0,  124,  124,  124,  124,  124,    0,  124,  124,
  423.   124,    0,    0,  124,  124,  124,  124,  124,   84,   84,
  424.    84,    0,    0,   84,   84,   84,   84,   84,    0,    0,
  425.     0,    0,    0,    0,    0,   84,   84,   84,   84,   84,
  426.    84,   84,   84,   84,   84,   84,   84,   84,    0,   84,
  427.    84,   84,   84,   84,   84,   84,    0,    0,    0,    0,
  428.    84,   84,   84,   84,   84,   84,    0,   84,   84,   84,
  429.     0,    0,   84,   84,   84,   84,   84,   85,   85,   85,
  430.     0,    0,   85,   85,   85,   85,   85,    0,    0,    0,
  431.     0,    0,    0,    0,   85,   85,   85,   85,   85,   85,
  432.    85,   85,   85,   85,   85,   85,   85,    0,   85,   85,
  433.    85,   85,   85,   85,   85,    0,    0,    0,    0,   85,
  434.    85,   85,   85,   85,   85,    0,   85,   85,   85,    0,
  435.     0,   85,   85,   85,   85,   85,   83,   83,   83,    0,
  436.     0,   83,   83,   83,   83,   83,    0,    0,    0,    0,
  437.     0,    0,    0,   83,   83,   83,   83,   83,   83,   83,
  438.    83,   83,   83,   83,   83,   83,    0,   83,   83,   83,
  439.    83,   83,   83,   83,    0,    0,    0,    0,   83,   83,
  440.    83,   83,   83,   83,    0,   83,   83,   83,    0,    0,
  441.    83,   83,   83,   83,   83,  159,  159,  159,    0,    0,
  442.   159,  159,  159,  159,  159,    0,    0,    0,    0,    0,
  443.     0,    0,  159,  159,  159,  159,  159,  159,  159,  159,
  444.   159,  159,  159,  159,  159,    0,  159,  159,  159,  159,
  445.   159,  159,  159,    0,    0,    0,    0,  159,  159,  159,
  446.   159,  159,  159,    0,  159,  159,  159,    0,    0,  159,
  447.   159,  159,  159,  159,   79,   79,   79,    0,    0,   79,
  448.    79,   79,   79,   79,    0,    0,    0,    0,    0,    0,
  449.     0,   79,   79,   79,   79,   79,   79,   79,   79,   79,
  450.    79,   79,   79,   79,    0,   79,   79,   79,   79,   79,
  451.    79,   79,    0,    0,    0,    0,   79,   79,   79,   79,
  452.    79,   79,    0,   79,   79,   79,    0,    0,   79,   79,
  453.    79,   79,   79,   80,   80,   80,    0,    0,   80,   80,
  454.    80,   80,   80,    0,    0,    0,    0,    0,    0,    0,
  455.    80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
  456.    80,   80,   80,    0,   80,   80,   80,   80,   80,   80,
  457.    80,    0,    0,    0,    0,   80,   80,   80,   80,   80,
  458.    80,    0,   80,   80,   80,    0,    0,   80,   80,   80,
  459.    80,   80,   81,   81,   81,    0,    0,   81,   81,   81,
  460.    81,   81,    0,    0,    0,    0,    0,    0,    0,   81,
  461.    81,   81,   81,   81,   81,   81,   81,   81,   81,   81,
  462.    81,   81,    0,   81,   81,   81,   81,   81,   81,   81,
  463.     0,    0,    0,    0,   81,   81,   81,   81,   81,   81,
  464.     0,   81,   81,   81,    0,    0,   81,   81,   81,   81,
  465.    81,  157,  157,  157,    0,    0,  157,  157,  157,  157,
  466.   157,    0,    0,    0,    0,    0,    0,    0,  157,  157,
  467.   157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
  468.   157,    0,  157,  157,  157,  157,  157,  157,  157,    0,
  469.     0,  157,  157,  157,    0,    0,    0,  157,  157,    0,
  470.     0,  157,  157,    0,    0,  157,  157,  157,  157,  157,
  471.   160,  160,  160,    0,    0,  160,  160,  160,  160,  160,
  472.     0,    0,    0,    0,    0,    0,    0,  160,  160,  160,
  473.   160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
  474.     0,  160,  160,  160,  160,  160,  160,  160,    0,    0,
  475.   160,  160,  160,    0,    0,    0,  160,  160,    0,    0,
  476.   160,  160,    0,    0,  160,  160,  160,  160,  160,   77,
  477.    77,   77,    0,    0,   77,   77,   77,   77,   77,    0,
  478.     0,    0,    0,    0,    0,    0,   77,   77,   77,   77,
  479.    77,   77,   77,   77,   77,   77,   77,   77,   77,    0,
  480.    77,   77,   77,    0,    0,    0,   77,    0,    0,    0,
  481.     0,   77,   77,   77,   77,   77,   77,    0,   77,   77,
  482.    77,    0,    0,   77,   77,   77,   77,   77,   78,   78,
  483.    78,    0,    0,   78,   78,   78,   78,   78,    0,    0,
  484.     0,    0,    0,    0,    0,   78,   78,   78,   78,   78,
  485.    78,   78,   78,   78,   78,   78,   78,   78,    0,   78,
  486.    78,   78,    0,    0,    0,   78,    0,    0,    0,    0,
  487.    78,   78,   78,   78,   78,   78,    0,   78,   78,   78,
  488.     0,    0,   78,   78,   78,   78,   78,   72,   72,   72,
  489.     0,    0,   72,   72,   72,   72,   72,    0,    0,    0,
  490.     0,    0,    0,    0,   72,   72,   72,   72,   72,   72,
  491.    72,   72,   72,   72,   72,   72,   72,    0,   72,    0,
  492.     0,    0,    0,    0,   72,    0,    0,    0,    0,   72,
  493.    72,   72,   72,   72,   72,    0,   72,   72,   72,    0,
  494.     0,   72,   72,   72,   72,   72,   73,   73,   73,    0,
  495.     0,   73,   73,   73,   73,   73,    0,    0,    0,    0,
  496.     0,    0,    0,   73,   73,   73,   73,   73,   73,   73,
  497.    73,   73,   73,   73,   73,   73,    0,   73,   44,   45,
  498.     0,    0,    0,   73,    0,    0,    0,    0,   73,   73,
  499.    73,   73,   73,   73,    0,   73,   73,   73,    0,    0,
  500.    73,   73,   73,   73,   73,    0,    0,    0,    0,    3,
  501.     4,    5,    0,    0,    0,   46,    0,    0,    0,    0,
  502.     7,    8,    9,   47,    0,   11,    0,   13,   14,   15,
  503.     0,    0,   16,   17,   18,   19,   20,   75,    0,    0,
  504.    97,    0,    0,    0,    0,    0,   91,   91,   91,   91,
  505.    91,   91,   91,   75,    0,   75,   75,    0,   75,   75,
  506.    75,   75,   75,   75,   75,   75,    0,   75,   75,   75,
  507.    75,   75,   75,   75,    0,    0,   75,   75,    0,   75,
  508.    75,   75,    0,   75,    0,   75,   75,   75,    0,   97,
  509.    75,   75,   75,   75,   75,   91,   91,   91,   91,   91,
  510.    91,   91,   75,    0,   75,   75,   75,   75,   75,   75,
  511.    75,   75,   75,   75,   75,    0,   75,   75,   75,   75,
  512.    75,   75,   75,    0,    0,   75,   75,    0,   75,   75,
  513.    75,    0,   75,    0,   75,   75,   75,    0,    0,   75,
  514.    75,   75,   75,   75,  136,    0,  136,  136,    0,    0,
  515.     0,    0,    0,    0,    0,  136,    0,  136,  136,  136,
  516.   136,  136,  136,  136,  136,  136,  136,  136,    0,  136,
  517.   136,  136,  136,  136,  136,  136,    0,    0,  136,  136,
  518.     0,  136,  136,  136,    0,  136,    0,  136,  136,  136,
  519.     0,    0,  136,  136,  136,  136,  136,   49,   49,   49,
  520.     0,    0,   49,   49,   49,   49,   49,    0,    0,    0,
  521.     0,    0,    0,    0,   49,   49,   49,   49,   49,   49,
  522.    49,   49,   49,   49,   49,   49,   49,   53,   53,   53,
  523.     0,    0,   53,   53,   53,   53,   53,    0,    0,    0,
  524.     0,    0,    0,   49,    0,   53,   54,   54,   54,    0,
  525.     0,   54,   54,   54,   54,   54,    0,    0,    0,    0,
  526.    55,   55,   55,    0,   54,   55,   55,   55,   55,   55,
  527.     0,    0,    0,   53,    0,   56,   56,   56,   55,    0,
  528.    56,   56,   56,   56,   56,    0,    0,    0,    0,  137,
  529.   137,  137,   54,   56,  137,  137,  137,  137,  137,    0,
  530.     0,    0,    0,    0,    0,    0,   55,  137,  138,  138,
  531.   138,    0,    0,  138,  138,  138,  138,  138,    0,    0,
  532.     0,   56,  139,  139,  139,    0,  138,  139,  139,  139,
  533.   139,  139,    0,    0,    0,  137,    0,  140,  140,  140,
  534.   139,    0,  140,  140,  140,  140,  140,    0,    0,    0,
  535.     0,  141,  141,  141,  138,  140,  141,  141,  141,  141,
  536.   141,    0,    0,    0,    0,    0,    0,    0,  139,  141,
  537.   142,  142,  142,    0,    0,  142,  142,  142,  142,  142,
  538.     0,    0,    0,  140,  143,  143,  143,    0,  142,  143,
  539.   143,  143,  143,  143,    0,    0,    0,  141,    0,   71,
  540.    71,   71,  143,    0,   71,   71,   71,   71,   71,    0,
  541.     0,    0,    0,    0,    0,    0,  142,   71,  193,  134,
  542.   135,  136,  137,  138,  139,  140,  141,  142,    0,  131,
  543.   143,  132,  133,  134,  135,  136,  137,  138,  139,  140,
  544.   141,  142,    0,    0,    0,   71,  309,  116,  117,  118,
  545.   119,  120,  121,  122,    0,    0,    0,  131,  194,  132,
  546.   133,  134,  135,  136,  137,  138,  139,  140,  141,  142,
  547.     0,    0,    0,    0,  336,    0,    0,    0,    0,    0,
  548.     0,   44,   45,    0,    0,  131,  310,  132,  133,  134,
  549.   135,  136,  137,  138,  139,  140,  141,  142,  131,    0,
  550.   132,  133,  134,  135,  136,  137,  138,  139,  140,  141,
  551.   142,    0,    0,  131,  337,  132,  133,  134,  135,  136,
  552.   137,  138,  139,  140,  141,  142,  131,    0,  132,  133,
  553.   134,  135,  136,  137,  138,  139,  140,  141,  142,    0,
  554.     0,  131,  291,  132,  133,  134,  135,  136,  137,  138,
  555.   139,  140,  141,  142,  131,  294,  132,  133,  134,  135,
  556.   136,  137,  138,  139,  140,  141,  142,    0,    0,    0,
  557.   342,    0,    0,    3,    4,    5,    0,    0,    0,    6,
  558.     0,    0,    0,  355,    7,    8,    9,   85,    0,   11,
  559.    12,   81,   14,   15,    0,    0,   16,   17,   18,   19,
  560.    20,    3,    4,    5,    0,    0,    0,    6,    0,    0,
  561.     0,    0,    7,    8,    9,   10,    0,   11,   12,   13,
  562.    14,   15,    0,    0,   16,   17,   18,   19,   20,    3,
  563.     4,    5,    0,    0,    0,   46,    0,    0,    0,    0,
  564.     7,    8,    9,   47,    0,   11,  228,   13,   14,   15,
  565.     0,    0,   16,   17,   18,   19,   20,    3,    4,    5,
  566.     0,    0,    0,   46,    0,    0,    0,    0,    7,    8,
  567.     9,   47,    0,   11,  349,   13,   14,   15,    0,    0,
  568.    16,   17,   18,   19,   20,    3,    4,    5,    0,    0,
  569.     0,   46,    0,    0,    0,    0,    7,    8,    9,   80,
  570.     0,   11,    0,   81,   14,   15,    0,    0,   16,   17,
  571.    18,   19,   20,    3,    4,    5,    0,    0,    0,   46,
  572.     0,    0,    0,    0,    7,    8,    9,   47,    0,   11,
  573.     0,   13,   14,   15,    0,    0,   16,   17,   18,   19,
  574.    20,    3,    4,    5,    0,    0,    0,   46,    0,    0,
  575.     0,    0,    7,    8,    9,   47,    0,   11,    0,  251,
  576.    14,   15,    0,    0,   16,   17,   18,   19,   20,    3,
  577.     4,    5,    0,    0,    0,   46,    0,    0,    0,    0,
  578.     7,    8,    9,  260,    0,   11,    0,   13,   14,   15,
  579.     0,    0,   16,   17,   18,   19,   20,    3,    4,    5,
  580.     0,    0,    0,   46,    0,    0,    0,    0,    7,    8,
  581.     9,   47,    0,   11,    0,  275,   14,   15,    0,    0,
  582.    16,   17,   18,   19,   20,  183,  183,  183,    0,    0,
  583.     0,  183,    0,    0,    0,    0,  183,  183,  183,  183,
  584.     0,  183,  279,  183,  183,  183,    0,    0,  183,  183,
  585.   183,  183,  183,  131,    0,  132,  133,  134,  135,  136,
  586.   137,  138,  139,  140,  141,  142,  280,    0,    0,    0,
  587.     0,    0,    0,    0,    0,    0,    0,  131,    0,  132,
  588.   133,  134,  135,  136,  137,  138,  139,  140,  141,  142,
  589.   131,  315,  132,  133,  134,  135,  136,  137,  138,  139,
  590.   140,  141,  142,  131,    0,  132,  133,  134,  135,  136,
  591.   137,  138,  139,  140,  141,  142,
  592. };
  593. short yycheck[] = {                                       7,
  594.     0,  243,  259,  260,  136,  308,  309,   10,  260,  266,
  595.    10,  261,    4,    5,    6,    7,    8,   61,   10,  151,
  596.   301,  265,  265,  308,   24,  265,   70,   71,   72,  265,
  597.    74,  304,  265,   41,  304,   79,  304,   29,  265,  267,
  598.   268,   33,  280,    0,    1,  259,  260,   47,  305,   41,
  599.   264,  265,  266,  305,   46,   47,  304,   57,  301,   59,
  600.    43,  305,  305,  301,  301,  305,  263,   24,  300,  305,
  601.    53,   54,  305,  195,   57,   58,   59,  305,  305,   36,
  602.    80,   64,   85,  259,  260,   85,  259,  260,   80,  262,
  603.   266,  305,   92,   85,  336,  304,   88,   14,   15,  304,
  604.    92,  304,  298,  304,  104,  105,  302,  303,  304,  302,
  605.   303,  304,  308,  306,  304,  308,  116,  117,  118,  119,
  606.   120,  121,  122,  123,  124,  125,  126,  127,  128,  129,
  607.   265,  114,  267,  268,  308,  135,  136,  137,  138,  139,
  608.   140,  141,  142,  290,  266,  267,  308,  269,  280,  106,
  609.   107,  151,  144,  145,  146,  147,  148,  114,  150,  298,
  610.    77,  161,  162,  324,   81,  165,  319,    4,    5,    6,
  611.   259,  260,   89,  295,  259,  260,  263,   94,  299,  300,
  612.   180,  266,  264,  265,  167,  264,  265,  170,  305,  172,
  613.   190,  263,   29,  193,  263,  195,   33,  280,  198,  199,
  614.   305,  204,  205,  206,  204,  205,  206,  267,  268,   46,
  615.   265,  259,  260,  261,  305,  259,  264,  265,  266,  267,
  616.   268,  302,  303,  304,  224,  225,  226,  308,  276,  277,
  617.   278,  279,  280,  281,  282,  243,  259,  260,  261,  264,
  618.   265,  264,  265,  266,  267,  268,  302,  303,  304,  166,
  619.   265,  243,  263,  276,  277,  278,  279,  305,  264,  265,
  620.   260,  259,  260,  261,  259,  260,  266,  267,  260,  269,
  621.   291,  292,  293,  294,  295,  259,  260,  261,  299,  300,
  622.   280,  265,  305,  267,  268,  259,  260,  261,  288,  259,
  623.   260,  261,  265,  293,  260,  295,  264,  265,  298,  266,
  624.   300,  301,  267,  268,  259,  260,  308,  144,  145,  146,
  625.   147,  148,  305,  150,  304,  256,  299,  308,  268,  308,
  626.   261,  305,  308,  301,  259,  260,  261,  260,  336,  305,
  627.   265,  314,  267,  305,  305,  335,  305,  260,  260,  260,
  628.   340,  259,  260,  343,  336,  305,  264,  265,  266,  290,
  629.   291,  292,  305,  305,  305,  296,  305,  314,  341,  342,
  630.   301,  302,  303,  304,    6,  306,  307,  308,  309,  310,
  631.   305,  314,  313,  314,  315,  316,  317,  256,  260,  340,
  632.   259,  260,  261,  262,  199,  326,  327,  305,   24,   -1,
  633.   331,   -1,   -1,   -1,  269,  270,  271,  272,  273,  274,
  634.   275,  259,  260,  261,   -1,   -1,  264,  265,  266,  267,
  635.   268,  290,  291,  292,   -1,   -1,   -1,  296,  276,  277,
  636.   278,   -1,  301,  302,  303,  304,  301,  306,   -1,  308,
  637.   309,  310,  311,  312,  313,  314,  315,  316,  317,  318,
  638.   319,  320,  321,  322,  323,   -1,  325,  305,   -1,  328,
  639.   329,  330,  256,   -1,   -1,  259,  260,  261,  262,  269,
  640.   270,  271,  272,  273,  274,  275,  279,  280,  281,  282,
  641.   283,  284,  285,  286,  287,  288,  259,  260,  261,   -1,
  642.    -1,  264,  265,  266,  267,  268,  290,  291,  292,   -1,
  643.    -1,  301,  296,   -1,  277,  305,   -1,  301,  302,  303,
  644.   304,   -1,  306,   -1,  308,  309,  310,  311,  312,  313,
  645.   314,  315,  316,  317,  318,  319,  320,  321,  322,  323,
  646.    -1,  325,  305,   -1,  328,  329,  330,  256,   -1,   -1,
  647.   259,  260,  261,   -1,   -1,  276,   -1,  278,  279,  280,
  648.   281,  282,  283,  284,  285,  286,  287,  288,  293,  294,
  649.   295,  259,  260,  261,  299,  300,  264,  265,  266,  267,
  650.   268,  290,  291,  292,  305,   -1,   -1,  296,   -1,  277,
  651.    -1,   -1,  301,  302,  303,  304,   -1,  306,   -1,  308,
  652.   309,  310,  311,  312,  313,  314,  315,  316,  317,  318,
  653.   319,  320,  321,  322,  323,   -1,  325,  305,   -1,  328,
  654.   329,  330,  256,   -1,   -1,  259,  260,  261,   -1,   -1,
  655.   276,   -1,  278,  279,  280,  281,  282,  283,  284,  285,
  656.   286,  287,  288,   -1,   -1,   -1,  259,  260,  261,   -1,
  657.    -1,  264,  265,  266,  267,  268,  290,  291,  292,  305,
  658.    -1,   -1,  296,   -1,  277,   -1,   -1,  301,  302,  303,
  659.   304,   -1,  306,   -1,  308,  309,  310,  311,  312,  313,
  660.   314,  315,  316,  317,  318,  319,  320,  321,  322,  323,
  661.    -1,  325,  305,   -1,  328,  329,  330,  259,  260,  261,
  662.    -1,  263,  264,  265,  266,  267,  268,  269,  270,  271,
  663.   272,  273,  274,  275,  276,  277,  278,  279,  280,  281,
  664.   282,  283,  284,  285,  286,  287,  288,   -1,  290,  291,
  665.   292,  293,  294,  295,  296,   -1,  298,  299,  300,  301,
  666.   302,  303,  304,  305,  306,   -1,  308,  309,  310,   -1,
  667.    -1,  313,  314,  315,  316,  317,  259,  260,  261,   -1,
  668.   263,  264,  265,  266,  267,  268,  269,  270,  271,  272,
  669.   273,  274,  275,  276,  277,  278,  279,  280,  281,  282,
  670.   283,  284,  285,  286,  287,  288,   -1,  290,  291,  292,
  671.   293,  294,  295,  296,   -1,   -1,  299,  300,   -1,  302,
  672.   303,  304,  305,  306,   -1,  308,  309,  310,   -1,   -1,
  673.   313,  314,  315,  316,  317,  259,  260,  261,   -1,   -1,
  674.   264,  265,  266,  267,  268,  269,  270,  271,  272,  273,
  675.   274,  275,  276,  277,  278,  279,  280,  281,  282,  283,
  676.   284,  285,  286,  287,  288,   -1,  290,  291,  292,  293,
  677.   294,  295,  296,   -1,   -1,  299,  300,   -1,  302,  303,
  678.   304,  305,  306,   -1,  308,  309,  310,   -1,   -1,  313,
  679.   314,  315,  316,  317,  259,  260,  261,   -1,  263,  264,
  680.   265,  266,  267,  268,  283,  284,  285,  286,  287,  288,
  681.    -1,  276,  277,  278,  279,  280,  281,  282,  283,  284,
  682.   285,  286,  287,  288,   -1,  290,  291,  292,  293,  294,
  683.   295,  296,   -1,  298,  299,  300,  301,  302,  303,  304,
  684.   305,  306,   -1,  308,  309,  310,   -1,   -1,  313,  314,
  685.   315,  316,  317,  259,  260,  261,   -1,  263,  264,  265,
  686.   266,  267,  268,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  687.   276,  277,  278,  279,  280,  281,  282,  283,  284,  285,
  688.   286,  287,  288,   -1,  290,  291,  292,  293,  294,  295,
  689.   296,   -1,   -1,  299,  300,   -1,  302,  303,  304,  305,
  690.   306,   -1,  308,  309,  310,   -1,   -1,  313,  314,  315,
  691.   316,  317,  259,  260,  261,   -1,   -1,  264,  265,  266,
  692.   267,  268,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  276,
  693.   277,  278,  279,  280,  281,  282,  283,  284,  285,  286,
  694.   287,  288,   -1,  290,  291,  292,  293,  294,  295,  296,
  695.    -1,   -1,  299,  300,  301,  302,  303,  304,  305,  306,
  696.    -1,  308,  309,  310,   -1,   -1,  313,  314,  315,  316,
  697.   317,  259,  260,  261,   -1,   -1,  264,  265,  266,  267,
  698.   268,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  276,  277,
  699.   278,  279,  280,  281,  282,  283,  284,  285,  286,  287,
  700.   288,   -1,  290,  291,  292,  293,  294,  295,  296,   -1,
  701.    -1,  299,  300,   -1,  302,  303,  304,  305,  306,   -1,
  702.   308,  309,  310,   -1,   -1,  313,  314,  315,  316,  317,
  703.   259,  260,  261,   -1,   -1,  264,  265,  266,  267,  268,
  704.    -1,   -1,   -1,   -1,   -1,   -1,   -1,  276,  277,  278,
  705.   279,  280,  281,  282,  283,  284,  285,  286,  287,  288,
  706.    -1,  290,  291,  292,  293,  294,  295,  296,   -1,   -1,
  707.   299,   -1,  301,  302,  303,  304,  305,  306,   -1,  308,
  708.   309,  310,   -1,   -1,  313,  314,  315,  316,  317,  259,
  709.   260,  261,   -1,   -1,  264,  265,  266,  267,  268,   -1,
  710.    -1,   -1,   -1,   -1,   -1,   -1,  276,  277,  278,  279,
  711.   280,  281,  282,  283,  284,  285,  286,  287,  288,   -1,
  712.   290,  291,  292,  293,  294,  295,  296,   -1,   -1,  299,
  713.   300,   -1,  302,  303,  304,  305,  306,   -1,  308,  309,
  714.   310,   -1,   -1,  313,  314,  315,  316,  317,  259,  260,
  715.   261,   -1,   -1,  264,  265,  266,  267,  268,   -1,   -1,
  716.    -1,   -1,   -1,   -1,   -1,  276,  277,  278,  279,  280,
  717.   281,  282,  283,  284,  285,  286,  287,  288,   -1,  290,
  718.   291,  292,  293,  294,  295,  296,   -1,   -1,   -1,   -1,
  719.   301,  302,  303,  304,  305,  306,   -1,  308,  309,  310,
  720.    -1,   -1,  313,  314,  315,  316,  317,  259,  260,  261,
  721.    -1,   -1,  264,  265,  266,  267,  268,   -1,   -1,   -1,
  722.    -1,   -1,   -1,   -1,  276,  277,  278,  279,  280,  281,
  723.   282,  283,  284,  285,  286,  287,  288,   -1,  290,  291,
  724.   292,  293,  294,  295,  296,   -1,   -1,   -1,   -1,  301,
  725.   302,  303,  304,  305,  306,   -1,  308,  309,  310,   -1,
  726.    -1,  313,  314,  315,  316,  317,  259,  260,  261,   -1,
  727.    -1,  264,  265,  266,  267,  268,   -1,   -1,   -1,   -1,
  728.    -1,   -1,   -1,  276,  277,  278,  279,  280,  281,  282,
  729.   283,  284,  285,  286,  287,  288,   -1,  290,  291,  292,
  730.   293,  294,  295,  296,   -1,   -1,   -1,   -1,  301,  302,
  731.   303,  304,  305,  306,   -1,  308,  309,  310,   -1,   -1,
  732.   313,  314,  315,  316,  317,  259,  260,  261,   -1,   -1,
  733.   264,  265,  266,  267,  268,   -1,   -1,   -1,   -1,   -1,
  734.    -1,   -1,  276,  277,  278,  279,  280,  281,  282,  283,
  735.   284,  285,  286,  287,  288,   -1,  290,  291,  292,  293,
  736.   294,  295,  296,   -1,   -1,   -1,   -1,  301,  302,  303,
  737.   304,  305,  306,   -1,  308,  309,  310,   -1,   -1,  313,
  738.   314,  315,  316,  317,  259,  260,  261,   -1,   -1,  264,
  739.   265,  266,  267,  268,   -1,   -1,   -1,   -1,   -1,   -1,
  740.    -1,  276,  277,  278,  279,  280,  281,  282,  283,  284,
  741.   285,  286,  287,  288,   -1,  290,  291,  292,  293,  294,
  742.   295,  296,   -1,   -1,   -1,   -1,  301,  302,  303,  304,
  743.   305,  306,   -1,  308,  309,  310,   -1,   -1,  313,  314,
  744.   315,  316,  317,  259,  260,  261,   -1,   -1,  264,  265,
  745.   266,  267,  268,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  746.   276,  277,  278,  279,  280,  281,  282,  283,  284,  285,
  747.   286,  287,  288,   -1,  290,  291,  292,  293,  294,  295,
  748.   296,   -1,   -1,   -1,   -1,  301,  302,  303,  304,  305,
  749.   306,   -1,  308,  309,  310,   -1,   -1,  313,  314,  315,
  750.   316,  317,  259,  260,  261,   -1,   -1,  264,  265,  266,
  751.   267,  268,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  276,
  752.   277,  278,  279,  280,  281,  282,  283,  284,  285,  286,
  753.   287,  288,   -1,  290,  291,  292,  293,  294,  295,  296,
  754.    -1,   -1,   -1,   -1,  301,  302,  303,  304,  305,  306,
  755.    -1,  308,  309,  310,   -1,   -1,  313,  314,  315,  316,
  756.   317,  259,  260,  261,   -1,   -1,  264,  265,  266,  267,
  757.   268,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  276,  277,
  758.   278,  279,  280,  281,  282,  283,  284,  285,  286,  287,
  759.   288,   -1,  290,  291,  292,  293,  294,  295,  296,   -1,
  760.    -1,  299,  300,  301,   -1,   -1,   -1,  305,  306,   -1,
  761.    -1,  309,  310,   -1,   -1,  313,  314,  315,  316,  317,
  762.   259,  260,  261,   -1,   -1,  264,  265,  266,  267,  268,
  763.    -1,   -1,   -1,   -1,   -1,   -1,   -1,  276,  277,  278,
  764.   279,  280,  281,  282,  283,  284,  285,  286,  287,  288,
  765.    -1,  290,  291,  292,  293,  294,  295,  296,   -1,   -1,
  766.   299,  300,  301,   -1,   -1,   -1,  305,  306,   -1,   -1,
  767.   309,  310,   -1,   -1,  313,  314,  315,  316,  317,  259,
  768.   260,  261,   -1,   -1,  264,  265,  266,  267,  268,   -1,
  769.    -1,   -1,   -1,   -1,   -1,   -1,  276,  277,  278,  279,
  770.   280,  281,  282,  283,  284,  285,  286,  287,  288,   -1,
  771.   290,  291,  292,   -1,   -1,   -1,  296,   -1,   -1,   -1,
  772.    -1,  301,  302,  303,  304,  305,  306,   -1,  308,  309,
  773.   310,   -1,   -1,  313,  314,  315,  316,  317,  259,  260,
  774.   261,   -1,   -1,  264,  265,  266,  267,  268,   -1,   -1,
  775.    -1,   -1,   -1,   -1,   -1,  276,  277,  278,  279,  280,
  776.   281,  282,  283,  284,  285,  286,  287,  288,   -1,  290,
  777.   291,  292,   -1,   -1,   -1,  296,   -1,   -1,   -1,   -1,
  778.   301,  302,  303,  304,  305,  306,   -1,  308,  309,  310,
  779.    -1,   -1,  313,  314,  315,  316,  317,  259,  260,  261,
  780.    -1,   -1,  264,  265,  266,  267,  268,   -1,   -1,   -1,
  781.    -1,   -1,   -1,   -1,  276,  277,  278,  279,  280,  281,
  782.   282,  283,  284,  285,  286,  287,  288,   -1,  290,   -1,
  783.    -1,   -1,   -1,   -1,  296,   -1,   -1,   -1,   -1,  301,
  784.   302,  303,  304,  305,  306,   -1,  308,  309,  310,   -1,
  785.    -1,  313,  314,  315,  316,  317,  259,  260,  261,   -1,
  786.    -1,  264,  265,  266,  267,  268,   -1,   -1,   -1,   -1,
  787.    -1,   -1,   -1,  276,  277,  278,  279,  280,  281,  282,
  788.   283,  284,  285,  286,  287,  288,   -1,  290,  259,  260,
  789.    -1,   -1,   -1,  296,   -1,   -1,   -1,   -1,  301,  302,
  790.   303,  304,  305,  306,   -1,  308,  309,  310,   -1,   -1,
  791.   313,  314,  315,  316,  317,   -1,   -1,   -1,   -1,  290,
  792.   291,  292,   -1,   -1,   -1,  296,   -1,   -1,   -1,   -1,
  793.   301,  302,  303,  304,   -1,  306,   -1,  308,  309,  310,
  794.    -1,   -1,  313,  314,  315,  316,  317,  260,   -1,   -1,
  795.   263,   -1,   -1,   -1,   -1,   -1,  269,  270,  271,  272,
  796.   273,  274,  275,  276,   -1,  278,  279,   -1,  281,  282,
  797.   283,  284,  285,  286,  287,  288,   -1,  290,  291,  292,
  798.   293,  294,  295,  296,   -1,   -1,  299,  300,   -1,  302,
  799.   303,  304,   -1,  306,   -1,  308,  309,  310,   -1,  263,
  800.   313,  314,  315,  316,  317,  269,  270,  271,  272,  273,
  801.   274,  275,  276,   -1,  278,  279,  280,  281,  282,  283,
  802.   284,  285,  286,  287,  288,   -1,  290,  291,  292,  293,
  803.   294,  295,  296,   -1,   -1,  299,  300,   -1,  302,  303,
  804.   304,   -1,  306,   -1,  308,  309,  310,   -1,   -1,  313,
  805.   314,  315,  316,  317,  265,   -1,  267,  268,   -1,   -1,
  806.    -1,   -1,   -1,   -1,   -1,  276,   -1,  278,  279,  280,
  807.   281,  282,  283,  284,  285,  286,  287,  288,   -1,  290,
  808.   291,  292,  293,  294,  295,  296,   -1,   -1,  299,  300,
  809.    -1,  302,  303,  304,   -1,  306,   -1,  308,  309,  310,
  810.    -1,   -1,  313,  314,  315,  316,  317,  259,  260,  261,
  811.    -1,   -1,  264,  265,  266,  267,  268,   -1,   -1,   -1,
  812.    -1,   -1,   -1,   -1,  276,  277,  278,  279,  280,  281,
  813.   282,  283,  284,  285,  286,  287,  288,  259,  260,  261,
  814.    -1,   -1,  264,  265,  266,  267,  268,   -1,   -1,   -1,
  815.    -1,   -1,   -1,  305,   -1,  277,  259,  260,  261,   -1,
  816.    -1,  264,  265,  266,  267,  268,   -1,   -1,   -1,   -1,
  817.   259,  260,  261,   -1,  277,  264,  265,  266,  267,  268,
  818.    -1,   -1,   -1,  305,   -1,  259,  260,  261,  277,   -1,
  819.   264,  265,  266,  267,  268,   -1,   -1,   -1,   -1,  259,
  820.   260,  261,  305,  277,  264,  265,  266,  267,  268,   -1,
  821.    -1,   -1,   -1,   -1,   -1,   -1,  305,  277,  259,  260,
  822.   261,   -1,   -1,  264,  265,  266,  267,  268,   -1,   -1,
  823.    -1,  305,  259,  260,  261,   -1,  277,  264,  265,  266,
  824.   267,  268,   -1,   -1,   -1,  305,   -1,  259,  260,  261,
  825.   277,   -1,  264,  265,  266,  267,  268,   -1,   -1,   -1,
  826.    -1,  259,  260,  261,  305,  277,  264,  265,  266,  267,
  827.   268,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  305,  277,
  828.   259,  260,  261,   -1,   -1,  264,  265,  266,  267,  268,
  829.    -1,   -1,   -1,  305,  259,  260,  261,   -1,  277,  264,
  830.   265,  266,  267,  268,   -1,   -1,   -1,  305,   -1,  259,
  831.   260,  261,  277,   -1,  264,  265,  266,  267,  268,   -1,
  832.    -1,   -1,   -1,   -1,   -1,   -1,  305,  277,  265,  280,
  833.   281,  282,  283,  284,  285,  286,  287,  288,   -1,  276,
  834.   305,  278,  279,  280,  281,  282,  283,  284,  285,  286,
  835.   287,  288,   -1,   -1,   -1,  305,  265,  269,  270,  271,
  836.   272,  273,  274,  275,   -1,   -1,   -1,  276,  305,  278,
  837.   279,  280,  281,  282,  283,  284,  285,  286,  287,  288,
  838.    -1,   -1,   -1,   -1,  265,   -1,   -1,   -1,   -1,   -1,
  839.    -1,  259,  260,   -1,   -1,  276,  305,  278,  279,  280,
  840.   281,  282,  283,  284,  285,  286,  287,  288,  276,   -1,
  841.   278,  279,  280,  281,  282,  283,  284,  285,  286,  287,
  842.   288,   -1,   -1,  276,  305,  278,  279,  280,  281,  282,
  843.   283,  284,  285,  286,  287,  288,  276,   -1,  278,  279,
  844.   280,  281,  282,  283,  284,  285,  286,  287,  288,   -1,
  845.    -1,  276,  305,  278,  279,  280,  281,  282,  283,  284,
  846.   285,  286,  287,  288,  276,  305,  278,  279,  280,  281,
  847.   282,  283,  284,  285,  286,  287,  288,   -1,   -1,   -1,
  848.   305,   -1,   -1,  290,  291,  292,   -1,   -1,   -1,  296,
  849.    -1,   -1,   -1,  305,  301,  302,  303,  304,   -1,  306,
  850.   307,  308,  309,  310,   -1,   -1,  313,  314,  315,  316,
  851.   317,  290,  291,  292,   -1,   -1,   -1,  296,   -1,   -1,
  852.    -1,   -1,  301,  302,  303,  304,   -1,  306,  307,  308,
  853.   309,  310,   -1,   -1,  313,  314,  315,  316,  317,  290,
  854.   291,  292,   -1,   -1,   -1,  296,   -1,   -1,   -1,   -1,
  855.   301,  302,  303,  304,   -1,  306,  307,  308,  309,  310,
  856.    -1,   -1,  313,  314,  315,  316,  317,  290,  291,  292,
  857.    -1,   -1,   -1,  296,   -1,   -1,   -1,   -1,  301,  302,
  858.   303,  304,   -1,  306,  307,  308,  309,  310,   -1,   -1,
  859.   313,  314,  315,  316,  317,  290,  291,  292,   -1,   -1,
  860.    -1,  296,   -1,   -1,   -1,   -1,  301,  302,  303,  304,
  861.    -1,  306,   -1,  308,  309,  310,   -1,   -1,  313,  314,
  862.   315,  316,  317,  290,  291,  292,   -1,   -1,   -1,  296,
  863.    -1,   -1,   -1,   -1,  301,  302,  303,  304,   -1,  306,
  864.    -1,  308,  309,  310,   -1,   -1,  313,  314,  315,  316,
  865.   317,  290,  291,  292,   -1,   -1,   -1,  296,   -1,   -1,
  866.    -1,   -1,  301,  302,  303,  304,   -1,  306,   -1,  308,
  867.   309,  310,   -1,   -1,  313,  314,  315,  316,  317,  290,
  868.   291,  292,   -1,   -1,   -1,  296,   -1,   -1,   -1,   -1,
  869.   301,  302,  303,  304,   -1,  306,   -1,  308,  309,  310,
  870.    -1,   -1,  313,  314,  315,  316,  317,  290,  291,  292,
  871.    -1,   -1,   -1,  296,   -1,   -1,   -1,   -1,  301,  302,
  872.   303,  304,   -1,  306,   -1,  308,  309,  310,   -1,   -1,
  873.   313,  314,  315,  316,  317,  290,  291,  292,   -1,   -1,
  874.    -1,  296,   -1,   -1,   -1,   -1,  301,  302,  303,  304,
  875.    -1,  306,  265,  308,  309,  310,   -1,   -1,  313,  314,
  876.   315,  316,  317,  276,   -1,  278,  279,  280,  281,  282,
  877.   283,  284,  285,  286,  287,  288,  265,   -1,   -1,   -1,
  878.    -1,   -1,   -1,   -1,   -1,   -1,   -1,  276,   -1,  278,
  879.   279,  280,  281,  282,  283,  284,  285,  286,  287,  288,
  880.   276,  277,  278,  279,  280,  281,  282,  283,  284,  285,
  881.   286,  287,  288,  276,   -1,  278,  279,  280,  281,  282,
  882.   283,  284,  285,  286,  287,  288,
  883. };
  884. #define YYFINAL 24
  885. #ifndef YYDEBUG
  886. #define YYDEBUG 0
  887. #endif
  888. #define YYMAXTOKEN 331
  889. #if YYDEBUG
  890. char *yyname[] = {
  891. "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  892. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  893. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  894. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  895. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  896. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  897. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"UNEXPECTED","BAD_DECIMAL","NL",
  898. "SEMI_COLON","LBRACE","RBRACE","LBOX","RBOX","COMMA","IO_OUT","P_OR","P_AND",
  899. "ASSIGN","ADD_ASG","SUB_ASG","MUL_ASG","DIV_ASG","MOD_ASG","POW_ASG","QMARK",
  900. "COLON","OR","AND","IN","MATCH","NOT_MATCH","EQ","NEQ","LT","LTE","GT","GTE",
  901. "CAT","GETLINE","PLUS","MINUS","MUL","DIV","MOD","NOT","UMINUS","IO_IN","PIPE",
  902. "POW","INC_or_DEC","DOLLAR","FIELD","LPAREN","RPAREN","CONSTANT","RE","ID",
  903. "FUNCT_ID","BUILTIN","PRINT","PRINTF","SPLIT","MATCH_FUNC","SUB","GSUB",
  904. "LENGTH","DO","WHILE","FOR","BREAK","CONTINUE","IF","ELSE","DELETE","BEGIN",
  905. "END","EXIT","NEXT","RETURN","FUNCTION",
  906. };
  907. char *yyrule[] = {
  908. "$accept : program",
  909. "program : program_block",
  910. "program : program program_block",
  911. "program_block : PA_block",
  912. "program_block : function_def",
  913. "program_block : error block",
  914. "PA_block : block",
  915. "$$1 :",
  916. "PA_block : BEGIN $$1 block",
  917. "$$2 :",
  918. "PA_block : END $$2 block",
  919. "$$3 :",
  920. "PA_block : pattern $$3 block_or_separator",
  921. "$$4 :",
  922. "$$5 :",
  923. "PA_block : pattern COMMA $$4 pattern $$5 block_or_separator",
  924. "pattern : expr",
  925. "pattern : p_pattern",
  926. "$$6 :",
  927. "pattern : pattern P_OR $$6 pattern",
  928. "$$7 :",
  929. "pattern : pattern P_AND $$7 pattern",
  930. "p_pattern : RE",
  931. "p_pattern : LPAREN pattern RPAREN",
  932. "p_pattern : NOT p_pattern",
  933. "block : LBRACE statement_list RBRACE",
  934. "block : LBRACE error RBRACE",
  935. "block_or_separator : block",
  936. "block_or_separator : separator",
  937. "statement_list : statement",
  938. "statement_list : statement_list statement",
  939. "statement : block",
  940. "statement : expr separator",
  941. "statement : separator",
  942. "statement : error separator",
  943. "statement : print_statement",
  944. "statement : if_statement",
  945. "statement : if_else_statement",
  946. "statement : do_statement",
  947. "statement : while_statement",
  948. "statement : for_statement",
  949. "statement : array_loop",
  950. "statement : BREAK separator",
  951. "statement : CONTINUE separator",
  952. "statement : exit_statement",
  953. "statement : return_statement",
  954. "statement : NEXT separator",
  955. "separator : NL",
  956. "separator : SEMI_COLON",
  957. "expr : cat_expr",
  958. "expr : lvalue ASSIGN expr",
  959. "expr : lvalue ADD_ASG expr",
  960. "expr : lvalue SUB_ASG expr",
  961. "expr : lvalue MUL_ASG expr",
  962. "expr : lvalue DIV_ASG expr",
  963. "expr : lvalue MOD_ASG expr",
  964. "expr : lvalue POW_ASG expr",
  965. "expr : expr EQ expr",
  966. "expr : expr NEQ expr",
  967. "expr : expr LT expr",
  968. "expr : expr LTE expr",
  969. "expr : expr GT expr",
  970. "expr : expr GTE expr",
  971. "expr : expr MATCH re_or_expr",
  972. "expr : expr NOT_MATCH re_or_expr",
  973. "$$8 :",
  974. "expr : expr OR $$8 expr",
  975. "$$9 :",
  976. "expr : expr AND $$9 expr",
  977. "$$10 :",
  978. "$$11 :",
  979. "expr : expr QMARK $$10 expr COLON $$11 expr",
  980. "cat_expr : p_expr",
  981. "cat_expr : cat_expr p_expr",
  982. "p_expr : CONSTANT",
  983. "p_expr : ID",
  984. "p_expr : LPAREN expr RPAREN",
  985. "p_expr : p_expr PLUS p_expr",
  986. "p_expr : p_expr MINUS p_expr",
  987. "p_expr : p_expr MUL p_expr",
  988. "p_expr : p_expr DIV p_expr",
  989. "p_expr : p_expr MOD p_expr",
  990. "p_expr : p_expr POW p_expr",
  991. "p_expr : NOT p_expr",
  992. "p_expr : PLUS p_expr",
  993. "p_expr : MINUS p_expr",
  994. "p_expr : builtin",
  995. "p_expr : ID INC_or_DEC",
  996. "p_expr : INC_or_DEC lvalue",
  997. "p_expr : field INC_or_DEC",
  998. "p_expr : INC_or_DEC field",
  999. "lvalue : ID",
  1000. "arglist :",
  1001. "arglist : args",
  1002. "args : expr",
  1003. "args : args COMMA expr",
  1004. "builtin : BUILTIN mark LPAREN arglist RPAREN",
  1005. "mark :",
  1006. "print_statement : print mark pr_args pr_direction separator",
  1007. "print : PRINT",
  1008. "print : PRINTF",
  1009. "pr_args : arglist",
  1010. "pr_args : LPAREN arg2 RPAREN",
  1011. "arg2 : expr COMMA expr",
  1012. "arg2 : arg2 COMMA expr",
  1013. "pr_direction :",
  1014. "pr_direction : IO_OUT expr",
  1015. "if_front : IF LPAREN expr RPAREN",
  1016. "if_statement : if_front statement",
  1017. "else : ELSE",
  1018. "if_else_statement : if_front statement else statement",
  1019. "do : DO",
  1020. "do_statement : do statement WHILE LPAREN expr RPAREN separator",
  1021. "while_front : WHILE LPAREN expr RPAREN",
  1022. "while_statement : while_front statement",
  1023. "for_front : FOR LPAREN fexpr0 SEMI_COLON fexpr1 SEMI_COLON fexpr0 RPAREN",
  1024. "for_statement : for_front statement",
  1025. "fexpr0 :",
  1026. "fexpr0 : expr",
  1027. "fexpr1 :",
  1028. "fexpr1 : expr",
  1029. "expr : expr IN ID",
  1030. "expr : LPAREN arg2 RPAREN IN ID",
  1031. "lvalue : ID mark LBOX args RBOX",
  1032. "p_expr : ID mark LBOX args RBOX",
  1033. "p_expr : ID mark LBOX args RBOX INC_or_DEC",
  1034. "statement : DELETE ID mark LBOX args RBOX separator",
  1035. "array_loop_front : FOR LPAREN ID IN ID RPAREN",
  1036. "array_loop : array_loop_front statement",
  1037. "field : FIELD",
  1038. "field : DOLLAR ID",
  1039. "field : DOLLAR ID mark LBOX args RBOX",
  1040. "field : DOLLAR LPAREN expr RPAREN",
  1041. "field : DOLLAR field",
  1042. "field : LPAREN field RPAREN",
  1043. "field : DOLLAR CONSTANT",
  1044. "p_expr : field",
  1045. "expr : field ASSIGN expr",
  1046. "expr : field ADD_ASG expr",
  1047. "expr : field SUB_ASG expr",
  1048. "expr : field MUL_ASG expr",
  1049. "expr : field DIV_ASG expr",
  1050. "expr : field MOD_ASG expr",
  1051. "expr : field POW_ASG expr",
  1052. "p_expr : SPLIT LPAREN expr COMMA ID RPAREN",
  1053. "$$12 :",
  1054. "p_expr : SPLIT LPAREN expr COMMA ID COMMA $$12 split_back",
  1055. "split_back : expr RPAREN",
  1056. "split_back : RE RPAREN",
  1057. "p_expr : MATCH_FUNC LPAREN expr COMMA re_or_expr RPAREN",
  1058. "re_or_expr : RE",
  1059. "re_or_expr : expr",
  1060. "p_expr : LENGTH",
  1061. "exit_statement : EXIT separator",
  1062. "exit_statement : EXIT expr separator",
  1063. "return_statement : RETURN separator",
  1064. "return_statement : RETURN expr separator",
  1065. "p_expr : getline",
  1066. "p_expr : getline fvalue",
  1067. "p_expr : getline_file p_expr",
  1068. "p_expr : p_expr PIPE GETLINE",
  1069. "p_expr : p_expr PIPE GETLINE fvalue",
  1070. "getline : GETLINE",
  1071. "fvalue : lvalue",
  1072. "fvalue : field",
  1073. "getline_file : getline IO_IN",
  1074. "getline_file : getline fvalue IO_IN",
  1075. "p_expr : sub_or_gsub LPAREN re_or_expr COMMA expr sub_back",
  1076. "sub_or_gsub : SUB",
  1077. "sub_or_gsub : GSUB",
  1078. "sub_back : RPAREN",
  1079. "sub_back : COMMA fvalue RPAREN",
  1080. "function_def : funct_start block",
  1081. "funct_start : funct_head LPAREN f_arglist RPAREN",
  1082. "funct_head : FUNCTION ID",
  1083. "funct_head : FUNCTION FUNCT_ID",
  1084. "f_arglist :",
  1085. "f_arglist : f_args",
  1086. "f_args : ID",
  1087. "f_args : f_args COMMA ID",
  1088. "p_expr : FUNCT_ID mark call_args",
  1089. "call_args : LPAREN RPAREN",
  1090. "call_args : ca_front ca_back",
  1091. "ca_front : LPAREN",
  1092. "ca_front : ca_front expr COMMA",
  1093. "ca_front : ca_front ID COMMA",
  1094. "ca_back : expr RPAREN",
  1095. "ca_back : ID RPAREN",
  1096. };
  1097. #endif
  1098. #define yyclearin (yychar=(-1))
  1099. #define yyerrok (yyerrflag=0)
  1100. #ifdef YYSTACKSIZE
  1101. #ifndef YYMAXDEPTH
  1102. #define YYMAXDEPTH YYSTACKSIZE
  1103. #endif
  1104. #else
  1105. #ifdef YYMAXDEPTH
  1106. #define YYSTACKSIZE YYMAXDEPTH
  1107. #else
  1108. #define YYSTACKSIZE 500
  1109. #define YYMAXDEPTH 500
  1110. #endif
  1111. #endif
  1112. int yydebug;
  1113. int yynerrs;
  1114. int yyerrflag;
  1115. int yychar;
  1116. short *yyssp;
  1117. YYSTYPE *yyvsp;
  1118. YYSTYPE yyval;
  1119. YYSTYPE yylval;
  1120. short yyss[YYSTACKSIZE];
  1121. YYSTYPE yyvs[YYSTACKSIZE];
  1122. #define yystacksize YYSTACKSIZE
  1123. #line 1038 "parse.y"
  1124.  
  1125. /* resize the code for a user function */
  1126.  
  1127. static void  resize_fblock( fbp, code_ptr )
  1128.   FBLOCK *fbp ;
  1129.   INST *code_ptr ;
  1130. { int size ;
  1131.  
  1132.   code1(_RET0) ; /* make sure there is always a return statement */
  1133.  
  1134.   if ( dump_code )  
  1135.   { code1(_HALT) ; /*stops da() */
  1136.     add_to_fdump_list(fbp) ;
  1137.   }
  1138.  
  1139.   if ( (size = code_ptr - fbp->code) > PAGE_SZ-1 )
  1140.         overflow("function code size", PAGE_SZ ) ;
  1141.  
  1142.   /* resize the code */
  1143.   fbp->code = (INST*) zrealloc(fbp->code, PAGE_SZ*sizeof(INST),
  1144.                        size * sizeof(INST) ) ;
  1145.  
  1146. }
  1147.  
  1148. static void check_id( p )
  1149.   register SYMTAB *p ;
  1150. {
  1151.       switch(p->type)
  1152.       {
  1153.         case ST_NONE : /* new id */
  1154.             p->type = ST_VAR ;
  1155.             p->stval.cp = new_CELL() ;
  1156.             p->stval.cp->type = C_NOINIT ;
  1157.             break ;
  1158.  
  1159.         case ST_LOCAL_NONE :
  1160.             p->type = ST_LOCAL_VAR ;
  1161.             active_funct->typev[p->offset] = ST_LOCAL_VAR ;
  1162.             break ;
  1163.  
  1164.         case ST_VAR :
  1165.         case ST_LOCAL_VAR :  break ;
  1166.  
  1167.         default :
  1168.             type_error(p) ;
  1169.             break ;
  1170.       }
  1171. }
  1172.  
  1173. static  void  check_array(p)
  1174.   register SYMTAB *p ;
  1175. {
  1176.       switch(p->type)
  1177.       {
  1178.         case ST_NONE :  /* a new array */
  1179.             p->type = ST_ARRAY ;
  1180.             p->stval.array = new_ARRAY() ;
  1181.             break ;
  1182.  
  1183.         case  ST_ARRAY :
  1184.         case  ST_LOCAL_ARRAY :
  1185.             break ;
  1186.  
  1187.         case  ST_LOCAL_NONE  :
  1188.             p->type = ST_LOCAL_ARRAY ;
  1189.             active_funct->typev[p->offset] = ST_LOCAL_ARRAY ;
  1190.             break ;
  1191.  
  1192.         default : type_error(p) ; break ;
  1193.       }
  1194. }
  1195.  
  1196. static void code_array(p)
  1197.   register SYMTAB *p ;
  1198. { if ( is_local(p) )
  1199.   { code1(LA_PUSHA) ; code1(p->offset) ; }
  1200.   else  code2(A_PUSHA, p->stval.array) ;
  1201. }
  1202.  
  1203. static  void  field_A2I()
  1204. {
  1205.      if ( code_ptr[-2].op == F_PUSHA )
  1206.            code_ptr[-2].op =  
  1207.                ((CELL *)code_ptr[-1].ptr == field ||
  1208.                 (CELL *)code_ptr[-1].ptr >  field+NF )
  1209.                 ? _PUSHI : F_PUSHI ;
  1210.      else if ( code_ptr[-1].op == FE_PUSHA ) 
  1211.            code_ptr[-1].op = FE_PUSHI ;
  1212.      else  bozo("missing F(E)_PUSHA") ;
  1213. }
  1214.  
  1215. static  int  current_offset()
  1216. {
  1217.   switch( scope )
  1218.   { 
  1219.     case  SCOPE_MAIN :  return code_ptr - main_start ;
  1220.     case  SCOPE_BEGIN :  return code_ptr - begin_start ;
  1221.     case  SCOPE_END   :  return code_ptr - end_start ;
  1222.     case  SCOPE_FUNCT :  return code_ptr - active_funct->code ;
  1223.   }
  1224. }
  1225.  
  1226. static void  code_call_id( p, ip )
  1227.   register CA_REC *p ;
  1228.   register SYMTAB *ip ;
  1229. { static CELL dummy ;
  1230.  
  1231.   switch( ip->type )
  1232.   {
  1233.     case  ST_VAR  :
  1234.             p->type = CA_EXPR ;
  1235.             code2(_PUSHI, ip->stval.cp) ;
  1236.             break ;
  1237.  
  1238.     case  ST_LOCAL_VAR  :
  1239.             p->type = CA_EXPR ;
  1240.             code1(L_PUSHI) ;
  1241.             code1(ip->offset) ;
  1242.             break ;
  1243.  
  1244.     case  ST_ARRAY  :
  1245.             p->type = CA_ARRAY ;
  1246.             code2(A_PUSHA, ip->stval.array) ;
  1247.             break ;
  1248.  
  1249.     case  ST_LOCAL_ARRAY :
  1250.             p->type = CA_ARRAY ;
  1251.             code1(LA_PUSHA) ;
  1252.             code1(ip->offset) ;
  1253.             break ;
  1254.  
  1255.     case  ST_NONE :
  1256.             p->type = ST_NONE ;
  1257.             p->call_offset = current_offset() ;
  1258.             p->sym_p = ip ;
  1259.             code2(_PUSHI, &dummy) ;
  1260.             break ;
  1261.  
  1262.     case  ST_LOCAL_NONE :
  1263.             p->type = ST_LOCAL_NONE ;
  1264.             p->call_offset = current_offset() ;
  1265.             p->type_p = & active_funct->typev[ip->offset] ;
  1266.             code1(L_PUSHI) ; 
  1267.             code1(ip->offset) ;
  1268.             break ;
  1269.  
  1270.   
  1271. #ifdef   DEBUG
  1272.     default :
  1273.             bozo("code_call_id") ;
  1274. #endif
  1275.  
  1276.   }
  1277. }
  1278.  
  1279. int parse()
  1280. { int yy = yyparse() ;
  1281.  
  1282. #if  YYBYACC
  1283.   extern struct yacc_mem *yacc_memp ;
  1284.  
  1285.   yacc_memp++  ; /* puts parser tables in mem pool */
  1286. #endif
  1287.  
  1288.   if ( resolve_list )  resolve_fcalls() ;
  1289.   return yy ;
  1290. }
  1291.  
  1292. #line 1293 "y.tab.c"
  1293. #define YYABORT goto yyabort
  1294. #define YYACCEPT goto yyaccept
  1295. #define YYERROR goto yyerrlab
  1296. int
  1297. yyparse()
  1298. {
  1299.     register int yym, yyn, yystate;
  1300. #if YYDEBUG
  1301.     register char *yys;
  1302.     extern char *getenv();
  1303.  
  1304.     if (yys = getenv("YYDEBUG"))
  1305.     {
  1306.         yyn = *yys;
  1307.         if (yyn >= '0' && yyn <= '9')
  1308.             yydebug = yyn - '0';
  1309.     }
  1310. #endif
  1311.  
  1312.     yynerrs = 0;
  1313.     yyerrflag = 0;
  1314.     yychar = (-1);
  1315.  
  1316.     yyssp = yyss;
  1317.     yyvsp = yyvs;
  1318.     *yyssp = yystate = 0;
  1319.  
  1320. yyloop:
  1321.     if (yyn = yydefred[yystate]) goto yyreduce;
  1322.     if (yychar < 0)
  1323.     {
  1324.         if ((yychar = yylex()) < 0) yychar = 0;
  1325. #if YYDEBUG
  1326.         if (yydebug)
  1327.         {
  1328.             yys = 0;
  1329.             if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
  1330.             if (!yys) yys = "illegal-symbol";
  1331.             printf("yydebug: state %d, reading %d (%s)\n", yystate,
  1332.                     yychar, yys);
  1333.         }
  1334. #endif
  1335.     }
  1336.     if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
  1337.             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
  1338.     {
  1339. #if YYDEBUG
  1340.         if (yydebug)
  1341.             printf("yydebug: state %d, shifting to state %d\n",
  1342.                     yystate, yytable[yyn]);
  1343. #endif
  1344.         if (yyssp >= yyss + yystacksize - 1)
  1345.         {
  1346.             goto yyoverflow;
  1347.         }
  1348.         *++yyssp = yystate = yytable[yyn];
  1349.         *++yyvsp = yylval;
  1350.         yychar = (-1);
  1351.         if (yyerrflag > 0)  --yyerrflag;
  1352.         goto yyloop;
  1353.     }
  1354.     if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
  1355.             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
  1356.     {
  1357.         yyn = yytable[yyn];
  1358.         goto yyreduce;
  1359.     }
  1360.     if (yyerrflag) goto yyinrecovery;
  1361. #ifdef lint
  1362.     goto yynewerror;
  1363. #endif
  1364. yynewerror:
  1365.     yyerror("syntax error");
  1366. #ifdef lint
  1367.     goto yyerrlab;
  1368. #endif
  1369. yyerrlab:
  1370.     ++yynerrs;
  1371. yyinrecovery:
  1372.     if (yyerrflag < 3)
  1373.     {
  1374.         yyerrflag = 3;
  1375.         for (;;)
  1376.         {
  1377.             if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
  1378.                     yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
  1379.             {
  1380. #if YYDEBUG
  1381.                 if (yydebug)
  1382.                     printf("yydebug: state %d, error recovery shifting\
  1383.  to state %d\n", *yyssp, yytable[yyn]);
  1384. #endif
  1385.                 if (yyssp >= yyss + yystacksize - 1)
  1386.                 {
  1387.                     goto yyoverflow;
  1388.                 }
  1389.                 *++yyssp = yystate = yytable[yyn];
  1390.                 *++yyvsp = yylval;
  1391.                 goto yyloop;
  1392.             }
  1393.             else
  1394.             {
  1395. #if YYDEBUG
  1396.                 if (yydebug)
  1397.                     printf("yydebug: error recovery discarding state %d\n",
  1398.                             *yyssp);
  1399. #endif
  1400.                 if (yyssp <= yyss) goto yyabort;
  1401.                 --yyssp;
  1402.                 --yyvsp;
  1403.             }
  1404.         }
  1405.     }
  1406.     else
  1407.     {
  1408.         if (yychar == 0) goto yyabort;
  1409. #if YYDEBUG
  1410.         if (yydebug)
  1411.         {
  1412.             yys = 0;
  1413.             if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
  1414.             if (!yys) yys = "illegal-symbol";
  1415.             printf("yydebug: state %d, error recovery discards token %d (%s)\n",
  1416.                     yystate, yychar, yys);
  1417.         }
  1418. #endif
  1419.         yychar = (-1);
  1420.         goto yyloop;
  1421.     }
  1422. yyreduce:
  1423. #if YYDEBUG
  1424.     if (yydebug)
  1425.         printf("yydebug: state %d, reducing by rule %d (%s)\n",
  1426.                 yystate, yyn, yyrule[yyn]);
  1427. #endif
  1428.     yym = yylen[yyn];
  1429.     yyval = yyvsp[1-yym];
  1430.     switch (yyn)
  1431.     {
  1432. case 5:
  1433. #line 172 "parse.y"
  1434. { if (scope == SCOPE_FUNCT)
  1435.                    { restore_ids() ; scope = SCOPE_MAIN ; }
  1436.                    code_ptr = main_code_ptr ;
  1437.                  }
  1438. break;
  1439. case 6:
  1440. #line 179 "parse.y"
  1441. { /* this do nothing action removes a vacuous warning
  1442.                   from Bison */
  1443.              }
  1444. break;
  1445. case 7:
  1446. #line 184 "parse.y"
  1447.           if ( ! begin_start )
  1448.             begin_start = begin_code_ptr =
  1449.             (INST*)zmalloc(PAGE_SZ*sizeof(INST)) ;
  1450.         
  1451.           main_code_ptr = code_ptr ;
  1452.                   code_ptr = begin_code_ptr ; 
  1453.                   scope = SCOPE_BEGIN ;
  1454.                 }
  1455. break;
  1456. case 8:
  1457. #line 195 "parse.y"
  1458. { begin_code_ptr = code_ptr ;
  1459.                   code_ptr = main_code_ptr ; 
  1460.                   scope = SCOPE_MAIN ;
  1461.                 }
  1462. break;
  1463. case 9:
  1464. #line 201 "parse.y"
  1465.           if ( ! end_start )
  1466.             end_start = end_code_ptr =
  1467.             (INST*)zmalloc(PAGE_SZ*sizeof(INST)) ;
  1468.         
  1469.           main_code_ptr = code_ptr ;
  1470.                   code_ptr = end_code_ptr ; 
  1471.                   scope = SCOPE_END ;
  1472.                 }
  1473. break;
  1474. case 10:
  1475. #line 212 "parse.y"
  1476. { end_code_ptr = code_ptr ;
  1477.                   code_ptr = main_code_ptr ; 
  1478.                   scope = SCOPE_MAIN ;
  1479.                 }
  1480. break;
  1481. case 11:
  1482. #line 218 "parse.y"
  1483. { code_jmp(_JZ, (INST*)0, yyvsp[0].start) ; }
  1484. break;
  1485. case 12:
  1486. #line 221 "parse.y"
  1487. { patch_jmp( code_ptr ) ; }
  1488. break;
  1489. case 13:
  1490. #line 225 "parse.y"
  1491. { code_push(yyvsp[-1].start, code_ptr - yyvsp[-1].start) ;
  1492.                code_ptr = yyvsp[-1].start ;
  1493.                code1(_RANGE) ; code1(1) ;
  1494.                code_ptr += 3 ;
  1495.                code_ptr += code_pop(code_ptr) ;
  1496.                code1(_STOP0) ;
  1497.                yyvsp[-1].start[2].op = code_ptr - (yyvsp[-1].start+1) ;
  1498.              }
  1499. break;
  1500. case 14:
  1501. #line 234 "parse.y"
  1502. { code1(_STOP0) ; }
  1503. break;
  1504. case 15:
  1505. #line 237 "parse.y"
  1506. { yyvsp[-5].start[3].op = yyvsp[0].start - (yyvsp[-5].start+1) ;
  1507.                yyvsp[-5].start[4].op = code_ptr - (yyvsp[-5].start+1) ;
  1508.              }
  1509. break;
  1510. case 18:
  1511. #line 247 "parse.y"
  1512. { code1(_DUP) ;
  1513.                   code_jmp(_JNZ, (INST*)0, (INST*)0) ;
  1514.                   code1(_POP) ;
  1515.                 }
  1516. break;
  1517. case 19:
  1518. #line 252 "parse.y"
  1519. { patch_jmp(code_ptr) ; }
  1520. break;
  1521. case 20:
  1522. #line 255 "parse.y"
  1523. { code1(_DUP) ;
  1524.                   code_jmp(_JZ, (INST*)0, (INST*)0) ;
  1525.                   code1(_POP) ;
  1526.                 }
  1527. break;
  1528. case 21:
  1529. #line 260 "parse.y"
  1530. { patch_jmp(code_ptr) ; }
  1531. break;
  1532. case 22:
  1533. #line 267 "parse.y"
  1534. { yyval.start = code_ptr ;
  1535.                 code2(_PUSHI, &field[0]) ;
  1536.                 code2(_PUSHC, yyvsp[0].cp) ;
  1537.                 code1(_MATCH) ;
  1538.               }
  1539. break;
  1540. case 23:
  1541. #line 274 "parse.y"
  1542. { yyval.start = yyvsp[-1].start ; }
  1543. break;
  1544. case 24:
  1545. #line 276 "parse.y"
  1546. { code1(_NOT) ; yyval.start = yyvsp[0].start ; }
  1547. break;
  1548. case 25:
  1549. #line 281 "parse.y"
  1550. { yyval.start = yyvsp[-1].start ; }
  1551. break;
  1552. case 26:
  1553. #line 283 "parse.y"
  1554. { yyval.start = code_ptr ; /* does nothing won't be executed */
  1555.               print_flag = getline_flag = paren_cnt = 0 ;
  1556.               yyerrok ; }
  1557. break;
  1558. case 28:
  1559. #line 290 "parse.y"
  1560. { yyval.start = code_ptr ;
  1561.                        code1(_PUSHINT) ; code1(0) ;
  1562.                        code2(_PRINT, bi_print) ;
  1563.                      }
  1564. break;
  1565. case 32:
  1566. #line 302 "parse.y"
  1567. { code1(_POP) ; }
  1568. break;
  1569. case 33:
  1570. #line 304 "parse.y"
  1571. { yyval.start = code_ptr ; }
  1572. break;
  1573. case 34:
  1574. #line 306 "parse.y"
  1575. { yyval.start = code_ptr ;
  1576.                 print_flag = getline_flag = 0 ;
  1577.                 paren_cnt = 0 ;
  1578.                 yyerrok ;
  1579.               }
  1580. break;
  1581. case 42:
  1582. #line 319 "parse.y"
  1583. { yyval.start = code_ptr ; BC_insert('B', code_ptr) ;
  1584.                code2(_JMP, 0) /* don't use code_jmp ! */ ; }
  1585. break;
  1586. case 43:
  1587. #line 322 "parse.y"
  1588. { yyval.start = code_ptr ; BC_insert('C', code_ptr) ;
  1589.                code2(_JMP, 0) ; }
  1590. break;
  1591. case 45:
  1592. #line 326 "parse.y"
  1593. { if ( scope != SCOPE_FUNCT )
  1594.                      compile_error("return outside function body") ;
  1595.              }
  1596. break;
  1597. case 46:
  1598. #line 330 "parse.y"
  1599. { if ( scope != SCOPE_MAIN )
  1600.                    compile_error( "improper use of next" ) ;
  1601.                 yyval.start = code_ptr ; code1(_NEXT) ;
  1602.               }
  1603. break;
  1604. case 50:
  1605. #line 340 "parse.y"
  1606. { code1(_ASSIGN) ; }
  1607. break;
  1608. case 51:
  1609. #line 341 "parse.y"
  1610. { code1(_ADD_ASG) ; }
  1611. break;
  1612. case 52:
  1613. #line 342 "parse.y"
  1614. { code1(_SUB_ASG) ; }
  1615. break;
  1616. case 53:
  1617. #line 343 "parse.y"
  1618. { code1(_MUL_ASG) ; }
  1619. break;
  1620. case 54:
  1621. #line 344 "parse.y"
  1622. { code1(_DIV_ASG) ; }
  1623. break;
  1624. case 55:
  1625. #line 345 "parse.y"
  1626. { code1(_MOD_ASG) ; }
  1627. break;
  1628. case 56:
  1629. #line 346 "parse.y"
  1630. { code1(_POW_ASG) ; }
  1631. break;
  1632. case 57:
  1633. #line 347 "parse.y"
  1634. { code1(_EQ) ; }
  1635. break;
  1636. case 58:
  1637. #line 348 "parse.y"
  1638. { code1(_NEQ) ; }
  1639. break;
  1640. case 59:
  1641. #line 349 "parse.y"
  1642. { code1(_LT) ; }
  1643. break;
  1644. case 60:
  1645. #line 350 "parse.y"
  1646. { code1(_LTE) ; }
  1647. break;
  1648. case 61:
  1649. #line 351 "parse.y"
  1650. { code1(_GT) ; }
  1651. break;
  1652. case 62:
  1653. #line 352 "parse.y"
  1654. { code1(_GTE) ; }
  1655. break;
  1656. case 63:
  1657. #line 354 "parse.y"
  1658. { code1(_MATCH) ; }
  1659. break;
  1660. case 64:
  1661. #line 356 "parse.y"
  1662. { code1(_MATCH) ; code1(_NOT) ; }
  1663. break;
  1664. case 65:
  1665. #line 360 "parse.y"
  1666. { code1(_DUP) ;
  1667.                 code_jmp(_JNZ, (INST*)0, (INST*)0) ;
  1668.                 code1(_POP) ;
  1669.               }
  1670. break;
  1671. case 66:
  1672. #line 365 "parse.y"
  1673. { patch_jmp(code_ptr) ; code1(_TEST) ; }
  1674. break;
  1675. case 67:
  1676. #line 368 "parse.y"
  1677. { code1(_DUP) ; code_jmp(_JZ, (INST*)0, (INST*)0) ;
  1678.                 code1(_POP) ; }
  1679. break;
  1680. case 68:
  1681. #line 371 "parse.y"
  1682. { patch_jmp(code_ptr) ; code1(_TEST) ; }
  1683. break;
  1684. case 69:
  1685. #line 373 "parse.y"
  1686. { code_jmp(_JZ, (INST*)0, yyvsp[-1].start) ; }
  1687. break;
  1688. case 70:
  1689. #line 374 "parse.y"
  1690. { code_jmp(_JMP, (INST*)0, (INST*)0) ; }
  1691. break;
  1692. case 71:
  1693. #line 376 "parse.y"
  1694. { patch_jmp(code_ptr) ; patch_jmp(yyvsp[0].start) ; }
  1695. break;
  1696. case 73:
  1697. #line 381 "parse.y"
  1698. { code1(_CAT) ; }
  1699. break;
  1700. case 74:
  1701. #line 385 "parse.y"
  1702. {  yyval.start = code_ptr ; code2(_PUSHC, yyvsp[0].cp) ; }
  1703. break;
  1704. case 75:
  1705. #line 387 "parse.y"
  1706. { check_id(yyvsp[0].stp) ;
  1707.             yyval.start = code_ptr ;
  1708.             if ( is_local(yyvsp[0].stp) )
  1709.             { code1(L_PUSHI) ; code1(yyvsp[0].stp->offset) ; }
  1710.             else code2(_PUSHI, yyvsp[0].stp->stval.cp) ;
  1711.           }
  1712. break;
  1713. case 76:
  1714. #line 395 "parse.y"
  1715. { yyval.start = yyvsp[-1].start ; }
  1716. break;
  1717. case 77:
  1718. #line 397 "parse.y"
  1719. { code1(_ADD) ; }
  1720. break;
  1721. case 78:
  1722. #line 398 "parse.y"
  1723. { code1(_SUB) ; }
  1724. break;
  1725. case 79:
  1726. #line 399 "parse.y"
  1727. { code1(_MUL) ; }
  1728. break;
  1729. case 80:
  1730. #line 400 "parse.y"
  1731. { code1(_DIV) ; }
  1732. break;
  1733. case 81:
  1734. #line 401 "parse.y"
  1735. { code1(_MOD) ; }
  1736. break;
  1737. case 82:
  1738. #line 402 "parse.y"
  1739. { code1(_POW) ; }
  1740. break;
  1741. case 83:
  1742. #line 404 "parse.y"
  1743. { yyval.start = yyvsp[0].start ; code1(_NOT) ; }
  1744. break;
  1745. case 84:
  1746. #line 406 "parse.y"
  1747. { yyval.start = yyvsp[0].start ; code1(_UPLUS) ; }
  1748. break;
  1749. case 85:
  1750. #line 408 "parse.y"
  1751. { yyval.start = yyvsp[0].start ; code1(_UMINUS) ; }
  1752. break;
  1753. case 87:
  1754. #line 413 "parse.y"
  1755. { check_id(yyvsp[-1].stp) ;
  1756.              yyval.start = code_ptr ;
  1757.              code_address(yyvsp[-1].stp) ;
  1758.  
  1759.              if ( yyvsp[0].ival == '+' )  code1(_POST_INC) ;
  1760.              else  code1(_POST_DEC) ;
  1761.            }
  1762. break;
  1763. case 88:
  1764. #line 421 "parse.y"
  1765. { yyval.start = yyvsp[0].start ; 
  1766.               if ( yyvsp[-1].ival == '+' ) code1(_PRE_INC) ;
  1767.               else  code1(_PRE_DEC) ;
  1768.             }
  1769. break;
  1770. case 89:
  1771. #line 428 "parse.y"
  1772. { if (yyvsp[0].ival == '+' ) code1(F_POST_INC ) ; 
  1773.              else  code1(F_POST_DEC) ;
  1774.            }
  1775. break;
  1776. case 90:
  1777. #line 432 "parse.y"
  1778. { yyval.start = yyvsp[0].start ; 
  1779.              if ( yyvsp[-1].ival == '+' ) code1(F_PRE_INC) ;
  1780.              else  code1( F_PRE_DEC) ; 
  1781.            }
  1782. break;
  1783. case 91:
  1784. #line 439 "parse.y"
  1785. { yyval.start = code_ptr ; 
  1786.           check_id(yyvsp[0].stp) ;
  1787.           code_address(yyvsp[0].stp) ;
  1788.         }
  1789. break;
  1790. case 92:
  1791. #line 447 "parse.y"
  1792. { yyval.ival = 0 ; }
  1793. break;
  1794. case 94:
  1795. #line 452 "parse.y"
  1796. { yyval.ival = 1 ; }
  1797. break;
  1798. case 95:
  1799. #line 454 "parse.y"
  1800. { yyval.ival = yyvsp[-2].ival + 1 ; }
  1801. break;
  1802. case 96:
  1803. #line 459 "parse.y"
  1804. { BI_REC *p = yyvsp[-4].bip ;
  1805.           yyval.start = yyvsp[-3].start ;
  1806.           if ( p-> min_args > yyvsp[-1].ival || p->max_args < yyvsp[-1].ival )
  1807.             compile_error(
  1808.             "wrong number of arguments in call to %s" ,
  1809.             p->name ) ;
  1810.           if ( p->min_args != p->max_args ) /* variable args */
  1811.           { code1(_PUSHINT) ;  code1(yyvsp[-1].ival) ; }
  1812.           code2(_BUILTIN , p->fp) ;
  1813.         }
  1814. break;
  1815. case 97:
  1816. #line 473 "parse.y"
  1817. { yyval.start = code_ptr ; }
  1818. break;
  1819. case 98:
  1820. #line 476 "parse.y"
  1821. { code2(_PRINT, yyvsp[-4].fp) ; yyval.start = yyvsp[-3].start ;
  1822.               if ( yyvsp[-4].fp == bi_printf && yyvsp[-2].ival == 0 )
  1823.                     compile_error("no arguments in call to printf") ;
  1824.               print_flag = 0 ;
  1825.               yyval.start = yyvsp[-3].start ;
  1826.             }
  1827. break;
  1828. case 99:
  1829. #line 484 "parse.y"
  1830. { yyval.fp = bi_print ; print_flag = 1 ;}
  1831. break;
  1832. case 100:
  1833. #line 485 "parse.y"
  1834. { yyval.fp = bi_printf ; print_flag = 1 ; }
  1835. break;
  1836. case 101:
  1837. #line 488 "parse.y"
  1838. { code1(_PUSHINT) ; code1(yyvsp[0].ival) ; }
  1839. break;
  1840. case 102:
  1841. #line 490 "parse.y"
  1842. { yyval.ival = yyvsp[-1].arg2p->cnt ; zfree(yyvsp[-1].arg2p,sizeof(ARG2_REC)) ; 
  1843.              code1(_PUSHINT) ; code1(yyval.ival) ; 
  1844.            }
  1845. break;
  1846. case 103:
  1847. #line 496 "parse.y"
  1848. { yyval.arg2p = (ARG2_REC*) zmalloc(sizeof(ARG2_REC)) ;
  1849.              yyval.arg2p->start = yyvsp[-2].start ;
  1850.              yyval.arg2p->cnt = 2 ;
  1851.            }
  1852. break;
  1853. case 104:
  1854. #line 501 "parse.y"
  1855. { yyval.arg2p = yyvsp[-2].arg2p ; yyval.arg2p->cnt++ ; }
  1856. break;
  1857. case 106:
  1858. #line 506 "parse.y"
  1859. { code1(_PUSHINT) ; code1(yyvsp[-1].ival) ; }
  1860. break;
  1861. case 107:
  1862. #line 513 "parse.y"
  1863. {  yyval.start = yyvsp[-1].start ; eat_nl() ;
  1864.            code_jmp(_JZ, (INST*)0, yyvsp[-1].start) ;
  1865.         }
  1866. break;
  1867. case 108:
  1868. #line 519 "parse.y"
  1869. { patch_jmp( code_ptr ) ;  }
  1870. break;
  1871. case 109:
  1872. #line 522 "parse.y"
  1873. { eat_nl() ; code_jmp(_JMP, (INST*)0, (INST*)0) ; }
  1874. break;
  1875. case 110:
  1876. #line 526 "parse.y"
  1877. { patch_jmp(code_ptr) ; patch_jmp(yyvsp[0].start) ; }
  1878. break;
  1879. case 111:
  1880. #line 532 "parse.y"
  1881. { eat_nl() ; BC_new() ; }
  1882. break;
  1883. case 112:
  1884. #line 536 "parse.y"
  1885. { yyval.start = yyvsp[-5].start ;
  1886.           code_jmp(_JNZ, yyvsp[-5].start, yyvsp[-2].start) ; 
  1887.           BC_clear(code_ptr, yyvsp[-2].start) ; }
  1888. break;
  1889. case 113:
  1890. #line 542 "parse.y"
  1891. { eat_nl() ; BC_new() ;
  1892.                   code_push(yyvsp[-1].start, code_ptr-yyvsp[-1].start) ;
  1893.                   code_ptr = yyval.start = yyvsp[-1].start ;
  1894.                   code_jmp(_JMP,(INST*)0, (INST*)0) ;
  1895.                 }
  1896. break;
  1897. case 114:
  1898. #line 550 "parse.y"
  1899. { INST *c_addr = code_ptr ; /*continue address*/
  1900.           unsigned len ;
  1901.  
  1902.                   patch_jmp( c_addr) ;
  1903.           len = code_pop(c_addr) ;
  1904.                   code_ptr += len ;
  1905.                   code_jmp(_JNZ, yyvsp[0].start, code_ptr-len) ;
  1906.                   BC_clear(code_ptr, c_addr) ;
  1907.                 }
  1908. break;
  1909. case 115:
  1910. #line 564 "parse.y"
  1911. { yyval.start = yyvsp[-5].start ; eat_nl() ; BC_new() ;
  1912.                 /* push fexpr2 and 3 */
  1913.                 code_push( yyvsp[-3].start, yyvsp[-1].start-yyvsp[-3].start) ;
  1914.                 code_push( yyvsp[-1].start, code_ptr - yyvsp[-1].start) ;
  1915.                 /* reset code_ptr */
  1916.                 code_ptr = yyvsp[-3].start ;
  1917.                 code_jmp(_JMP, (INST*)0, (INST*)0) ;
  1918.               }
  1919. break;
  1920. case 116:
  1921. #line 575 "parse.y"
  1922. { INST *c_addr = code_ptr ;
  1923.                 unsigned len = code_pop(code_ptr) ;
  1924.  
  1925.                 code_ptr += len ;
  1926.                 patch_jmp(code_ptr) ;
  1927.                 len = code_pop(code_ptr) ;
  1928.                 code_ptr += len ;
  1929.                 code_jmp(_JNZ, yyvsp[0].start, code_ptr-len) ;
  1930.                 BC_clear( code_ptr, c_addr) ;
  1931.               }
  1932. break;
  1933. case 117:
  1934. #line 587 "parse.y"
  1935. { yyval.start = code_ptr; }
  1936. break;
  1937. case 118:
  1938. #line 588 "parse.y"
  1939. { code1(_POP) ; }
  1940. break;
  1941. case 119:
  1942. #line 592 "parse.y"
  1943. { /* this will be wiped out when the jmp is coded */
  1944.               yyval.start = code_ptr ; code2(_PUSHC, &cell_one) ; }
  1945. break;
  1946. case 121:
  1947. #line 600 "parse.y"
  1948. { check_array(yyvsp[0].stp) ;
  1949.              code_array(yyvsp[0].stp) ; 
  1950.              code1(A_TEST) ; 
  1951.             }
  1952. break;
  1953. case 122:
  1954. #line 605 "parse.y"
  1955. { yyval.start = yyvsp[-3].arg2p->start ;
  1956.              code1(A_CAT) ; code1(yyvsp[-3].arg2p->cnt) ;
  1957.              zfree(yyvsp[-3].arg2p, sizeof(ARG2_REC)) ;
  1958.  
  1959.              check_array(yyvsp[0].stp) ;
  1960.              code_array(yyvsp[0].stp) ;
  1961.              code1(A_TEST) ;
  1962.            }
  1963. break;
  1964. case 123:
  1965. #line 616 "parse.y"
  1966.              if ( yyvsp[-1].ival > 1 )
  1967.              { code1(A_CAT) ; code1(yyvsp[-1].ival) ; }
  1968.  
  1969.              check_array(yyvsp[-4].stp) ;
  1970.              if( is_local(yyvsp[-4].stp) )
  1971.              { code1(LAE_PUSHA) ; code1(yyvsp[-4].stp->offset) ; }
  1972.              else code2(AE_PUSHA, yyvsp[-4].stp->stval.array) ;
  1973.              yyval.start = yyvsp[-3].start ;
  1974.            }
  1975. break;
  1976. case 124:
  1977. #line 629 "parse.y"
  1978.              if ( yyvsp[-1].ival > 1 )
  1979.              { code1(A_CAT) ; code1(yyvsp[-1].ival) ; }
  1980.  
  1981.              check_array(yyvsp[-4].stp) ;
  1982.              if( is_local(yyvsp[-4].stp) )
  1983.              { code1(LAE_PUSHI) ; code1(yyvsp[-4].stp->offset) ; }
  1984.              else code2(AE_PUSHI, yyvsp[-4].stp->stval.array) ;
  1985.              yyval.start = yyvsp[-3].start ;
  1986.            }
  1987. break;
  1988. case 125:
  1989. #line 641 "parse.y"
  1990.              if ( yyvsp[-2].ival > 1 )
  1991.              { code1(A_CAT) ; code1(yyvsp[-2].ival) ; }
  1992.  
  1993.              check_array(yyvsp[-5].stp) ;
  1994.              if( is_local(yyvsp[-5].stp) )
  1995.              { code1(LAE_PUSHA) ; code1(yyvsp[-5].stp->offset) ; }
  1996.              else code2(AE_PUSHA, yyvsp[-5].stp->stval.array) ;
  1997.              if ( yyvsp[0].ival == '+' )  code1(_POST_INC) ;
  1998.              else  code1(_POST_DEC) ;
  1999.  
  2000.              yyval.start = yyvsp[-4].start ;
  2001.            }
  2002. break;
  2003. case 126:
  2004. #line 658 "parse.y"
  2005.                yyval.start = yyvsp[-4].start ;
  2006.                if ( yyvsp[-2].ival > 1 ) { code1(A_CAT) ; code1(yyvsp[-2].ival) ; }
  2007.                check_array(yyvsp[-5].stp) ;
  2008.                code_array(yyvsp[-5].stp) ;
  2009.                code1(A_DEL) ;
  2010.              }
  2011. break;
  2012. case 127:
  2013. #line 671 "parse.y"
  2014. { eat_nl() ; BC_new() ;
  2015.                       yyval.start = code_ptr ;
  2016.  
  2017.                       check_id(yyvsp[-3].stp) ;
  2018.                       code_address(yyvsp[-3].stp) ;
  2019.                       check_array(yyvsp[-1].stp) ;
  2020.                       code_array(yyvsp[-1].stp) ;
  2021.                       code1(A_LOOP) ; code1(_STOP) ;
  2022.                       code1(0) ; /* put offset of following code here*/
  2023.                     }
  2024. break;
  2025. case 128:
  2026. #line 684 "parse.y"
  2027. { code1(_STOP) ;  
  2028.                 BC_clear( yyvsp[0].start - 2, code_ptr-1) ;
  2029.                 yyvsp[0].start[-1].op = code_ptr - & yyvsp[0].start[-2] ;
  2030.               }
  2031. break;
  2032. case 129:
  2033. #line 698 "parse.y"
  2034. { yyval.start = code_ptr ; code2(F_PUSHA, yyvsp[0].cp) ; }
  2035. break;
  2036. case 130:
  2037. #line 700 "parse.y"
  2038. { check_id(yyvsp[0].stp) ;
  2039.              yyval.start = code_ptr ;
  2040.              if ( is_local(yyvsp[0].stp) )
  2041.              { code1(L_PUSHI) ; code1(yyvsp[0].stp->offset) ; }
  2042.              else code2(_PUSHI, yyvsp[0].stp->stval.cp) ;
  2043.              code1(FE_PUSHA) ;
  2044.            }
  2045. break;
  2046. case 131:
  2047. #line 708 "parse.y"
  2048.              if ( yyvsp[-1].ival > 1 )
  2049.              { code1(A_CAT) ; code1(yyvsp[-1].ival) ; }
  2050.  
  2051.              check_array(yyvsp[-4].stp) ;
  2052.              if( is_local(yyvsp[-4].stp) )
  2053.              { code1(LAE_PUSHI) ; code1(yyvsp[-4].stp->offset) ; }
  2054.              else code2(AE_PUSHI, yyvsp[-4].stp->stval.array) ;
  2055.              code1(FE_PUSHA) ;
  2056.  
  2057.              yyval.start = yyvsp[-3].start ;
  2058.            }
  2059. break;
  2060. case 132:
  2061. #line 721 "parse.y"
  2062. { yyval.start = yyvsp[-1].start ;  code1(FE_PUSHA) ; }
  2063. break;
  2064. case 133:
  2065. #line 723 "parse.y"
  2066. { yyval.start = yyvsp[0].start ;  field_A2I() ; code1(FE_PUSHA) ; }
  2067. break;
  2068. case 134:
  2069. #line 725 "parse.y"
  2070. { yyval.start = yyvsp[-1].start ; }
  2071. break;
  2072. case 135:
  2073. #line 727 "parse.y"
  2074. { yyval.start = code_ptr ;
  2075.              code2(_PUSHC, yyvsp[0].cp) ;
  2076.              code1(FE_PUSHA) ;
  2077.            }
  2078. break;
  2079. case 136:
  2080. #line 734 "parse.y"
  2081. { field_A2I() ; }
  2082. break;
  2083. case 137:
  2084. #line 737 "parse.y"
  2085. { code1(F_ASSIGN) ; }
  2086. break;
  2087. case 138:
  2088. #line 738 "parse.y"
  2089. { code1(F_ADD_ASG) ; }
  2090. break;
  2091. case 139:
  2092. #line 739 "parse.y"
  2093. { code1(F_SUB_ASG) ; }
  2094. break;
  2095. case 140:
  2096. #line 740 "parse.y"
  2097. { code1(F_MUL_ASG) ; }
  2098. break;
  2099. case 141:
  2100. #line 741 "parse.y"
  2101. { code1(F_DIV_ASG) ; }
  2102. break;
  2103. case 142:
  2104. #line 742 "parse.y"
  2105. { code1(F_MOD_ASG) ; }
  2106. break;
  2107. case 143:
  2108. #line 743 "parse.y"
  2109. { code1(F_POW_ASG) ; }
  2110. break;
  2111. case 144:
  2112. #line 750 "parse.y"
  2113. { yyval.start = yyvsp[-3].start ;
  2114.                check_array(yyvsp[-1].stp) ;
  2115.                code_array(yyvsp[-1].stp) ;
  2116.                code2(_PUSHI, &fs_shadow) ;
  2117.                code2(_BUILTIN, bi_split) ;
  2118.              }
  2119. break;
  2120. case 145:
  2121. #line 757 "parse.y"
  2122. { check_array(yyvsp[-1].stp) ; code_array(yyvsp[-1].stp) ; }
  2123. break;
  2124. case 146:
  2125. #line 759 "parse.y"
  2126. { yyval.start = yyvsp[-5].start ; code2(_BUILTIN, bi_split) ; }
  2127. break;
  2128. case 147:
  2129. #line 769 "parse.y"
  2130.                if ( code_ptr[-2].op == _PUSHC &&
  2131.                    ((CELL *)code_ptr[-1].ptr)->type == C_STRING )
  2132.                    cast_for_split(code_ptr[-1].ptr) ;
  2133.              }
  2134. break;
  2135. case 148:
  2136. #line 776 "parse.y"
  2137. { code2(_PUSHC, yyvsp[-1].cp) ; }
  2138. break;
  2139. case 149:
  2140. #line 785 "parse.y"
  2141. { yyval.start = yyvsp[-3].start ; code2(_BUILTIN, bi_match) ; }
  2142. break;
  2143. case 150:
  2144. #line 789 "parse.y"
  2145. { yyval.start = code_ptr ;
  2146.                   code2(_PUSHC, yyvsp[0].cp) ;
  2147.                 }
  2148. break;
  2149. case 151:
  2150. #line 793 "parse.y"
  2151. { if ( code_ptr[-2].op == _PUSHC &&
  2152.                        ((CELL *)code_ptr[-1].ptr)->type == C_STRING )
  2153.                      /* re compile now */
  2154.                      cast_to_RE((CELL *) code_ptr[-1].ptr) ;
  2155.                 }
  2156. break;
  2157. case 152:
  2158. #line 803 "parse.y"
  2159. { yyval.start = code_ptr ;
  2160.             code2(_PUSHI, field) ;
  2161.             code2(_BUILTIN, bi_length) ;
  2162.           }
  2163. break;
  2164. case 153:
  2165. #line 810 "parse.y"
  2166. { yyval.start = code_ptr ;
  2167.                       code1(_EXIT0) ; }
  2168. break;
  2169. case 154:
  2170. #line 813 "parse.y"
  2171. { yyval.start = yyvsp[-1].start ; code1(_EXIT) ; }
  2172. break;
  2173. case 155:
  2174. #line 816 "parse.y"
  2175. { yyval.start = code_ptr ;
  2176.                       code1(_RET0) ; }
  2177. break;
  2178. case 156:
  2179. #line 819 "parse.y"
  2180. { yyval.start = yyvsp[-1].start ; code1(_RET) ; }
  2181. break;
  2182. case 157:
  2183. #line 824 "parse.y"
  2184. { yyval.start = code_ptr ;
  2185.             code2(F_PUSHA, &field[0]) ;
  2186.             code1(_PUSHINT) ; code1(0) ; 
  2187.             code2(_BUILTIN, bi_getline) ;
  2188.             getline_flag = 0 ;
  2189.           }
  2190. break;
  2191. case 158:
  2192. #line 831 "parse.y"
  2193. { yyval.start = yyvsp[0].start ;
  2194.             code1(_PUSHINT) ; code1(0) ;
  2195.             code2(_BUILTIN, bi_getline) ;
  2196.             getline_flag = 0 ;
  2197.           }
  2198. break;
  2199. case 159:
  2200. #line 837 "parse.y"
  2201. { code1(_PUSHINT) ; code1(F_IN) ;
  2202.             code2(_BUILTIN, bi_getline) ;
  2203.             /* getline_flag already off in yylex() */
  2204.           }
  2205. break;
  2206. case 160:
  2207. #line 842 "parse.y"
  2208. { code2(F_PUSHA, &field[0]) ;
  2209.             code1(_PUSHINT) ; code1(PIPE_IN) ;
  2210.             code2(_BUILTIN, bi_getline) ;
  2211.           }
  2212. break;
  2213. case 161:
  2214. #line 847 "parse.y"
  2215.             code1(_PUSHINT) ; code1(PIPE_IN) ;
  2216.             code2(_BUILTIN, bi_getline) ;
  2217.           }
  2218. break;
  2219. case 162:
  2220. #line 853 "parse.y"
  2221. { getline_flag = 1 ; }
  2222. break;
  2223. case 165:
  2224. #line 858 "parse.y"
  2225. { yyval.start = code_ptr ;
  2226.                    code2(F_PUSHA, field+0) ;
  2227.                  }
  2228. break;
  2229. case 166:
  2230. #line 862 "parse.y"
  2231. { yyval.start = yyvsp[-1].start ; }
  2232. break;
  2233. case 167:
  2234. #line 870 "parse.y"
  2235. {
  2236.              if ( yyvsp[0].start - yyvsp[-1].start == 2   &&
  2237.                   yyvsp[-1].start->op == _PUSHC  &&
  2238.                   ((CELL *) yyvsp[-1].start[1].ptr)->type == C_STRING )
  2239.              /* cast from STRING to REPL at compile time */
  2240.                  cast_to_REPL( (CELL *) yyvsp[-1].start[1].ptr ) ;
  2241.  
  2242.              code2(_BUILTIN, yyvsp[-5].fp) ;
  2243.              yyval.start = yyvsp[-3].start ;
  2244.            }
  2245. break;
  2246. case 168:
  2247. #line 881 "parse.y"
  2248. { yyval.fp = bi_sub ; }
  2249. break;
  2250. case 169:
  2251. #line 882 "parse.y"
  2252. { yyval.fp = bi_gsub ; }
  2253. break;
  2254. case 170:
  2255. #line 886 "parse.y"
  2256. { yyval.start = code_ptr ;
  2257.                   code2(F_PUSHA, &field[0]) ; 
  2258.                 }
  2259. break;
  2260. case 171:
  2261. #line 891 "parse.y"
  2262. { yyval.start = yyvsp[-1].start ; }
  2263. break;
  2264. case 172:
  2265. #line 899 "parse.y"
  2266. { resize_fblock(yyvsp[-1].fbp, code_ptr) ;
  2267.                    code_ptr = main_code_ptr ;
  2268.                    scope = SCOPE_MAIN ;
  2269.                    active_funct = (FBLOCK *) 0 ;
  2270.                    restore_ids() ;
  2271.                  }
  2272. break;
  2273. case 173:
  2274. #line 909 "parse.y"
  2275. { eat_nl() ;
  2276.                    scope = SCOPE_FUNCT ;
  2277.                    active_funct = yyvsp[-3].fbp ;
  2278.                    main_code_ptr = code_ptr ;
  2279.  
  2280.                    if ( yyvsp[-3].fbp->nargs = yyvsp[-1].ival )
  2281.                         yyvsp[-3].fbp->typev = (char *) memset(
  2282.                                zmalloc(yyvsp[-1].ival), ST_LOCAL_NONE, yyvsp[-1].ival) ;
  2283.                    else yyvsp[-3].fbp->typev = (char *) 0 ;
  2284.                    code_ptr = yyvsp[-3].fbp->code = 
  2285.                        (INST *) zmalloc(PAGE_SZ*sizeof(INST)) ;
  2286.                  }
  2287. break;
  2288. case 174:
  2289. #line 924 "parse.y"
  2290. { FBLOCK  *fbp ;
  2291.  
  2292.                    if ( yyvsp[0].stp->type == ST_NONE )
  2293.                    {
  2294.                          yyvsp[0].stp->type = ST_FUNCT ;
  2295.                          fbp = yyvsp[0].stp->stval.fbp = 
  2296.                              (FBLOCK *) zmalloc(sizeof(FBLOCK)) ;
  2297.                          fbp->name = yyvsp[0].stp->name ;
  2298.                    }
  2299.                    else
  2300.                    {
  2301.                          type_error( yyvsp[0].stp ) ;
  2302.  
  2303.                          /* this FBLOCK will not be put in
  2304.                             the symbol table */
  2305.                          fbp = (FBLOCK*) zmalloc(sizeof(FBLOCK)) ;
  2306.                          fbp->name = "" ;
  2307.                    }
  2308.                    yyval.fbp = fbp ;
  2309.                  }
  2310. break;
  2311. case 175:
  2312. #line 946 "parse.y"
  2313. { yyval.fbp = yyvsp[0].fbp ; 
  2314.                    if ( yyvsp[0].fbp->code ) 
  2315.                        compile_error("redefinition of %s" , yyvsp[0].fbp->name) ;
  2316.                  }
  2317. break;
  2318. case 176:
  2319. #line 952 "parse.y"
  2320. { yyval.ival = 0 ; }
  2321. break;
  2322. case 178:
  2323. #line 957 "parse.y"
  2324. { yyvsp[0].stp = save_id(yyvsp[0].stp->name) ;
  2325.                 yyvsp[0].stp->type = ST_LOCAL_NONE ;
  2326.                 yyvsp[0].stp->offset = 0 ;
  2327.                 yyval.ival = 1 ;
  2328.               }
  2329. break;
  2330. case 179:
  2331. #line 963 "parse.y"
  2332. { if ( is_local(yyvsp[0].stp) ) 
  2333.                   compile_error("%s is duplicated in argument list",
  2334.                     yyvsp[0].stp->name) ;
  2335.                 else
  2336.                 { yyvsp[0].stp = save_id(yyvsp[0].stp->name) ;
  2337.                   yyvsp[0].stp->type = ST_LOCAL_NONE ;
  2338.                   yyvsp[0].stp->offset = yyvsp[-2].ival ;
  2339.                   yyval.ival = yyvsp[-2].ival + 1 ;
  2340.                 }
  2341.               }
  2342. break;
  2343. case 180:
  2344. #line 978 "parse.y"
  2345. { yyval.start = yyvsp[-1].start ;
  2346.              code2(_CALL, yyvsp[-2].fbp) ;
  2347.  
  2348.              if ( yyvsp[0].ca_p )  code1(yyvsp[0].ca_p->arg_num+1) ;
  2349.              else  code1(0) ;
  2350.                
  2351.              check_fcall(yyvsp[-2].fbp, scope, active_funct, 
  2352.                          yyvsp[0].ca_p, token_lineno) ;
  2353.            }
  2354. break;
  2355. case 181:
  2356. #line 990 "parse.y"
  2357. { yyval.ca_p = (CA_REC *) 0 ; }
  2358. break;
  2359. case 182:
  2360. #line 992 "parse.y"
  2361. { yyval.ca_p = yyvsp[0].ca_p ;
  2362.                  yyval.ca_p->link = yyvsp[-1].ca_p ;
  2363.                  yyval.ca_p->arg_num = yyvsp[-1].ca_p ? yyvsp[-1].ca_p->arg_num+1 : 0 ;
  2364.                }
  2365. break;
  2366. case 183:
  2367. #line 1007 "parse.y"
  2368. { yyval.ca_p = (CA_REC *) 0 ; }
  2369. break;
  2370. case 184:
  2371. #line 1009 "parse.y"
  2372. { yyval.ca_p = (CA_REC *) zmalloc(sizeof(CA_REC)) ;
  2373.                 yyval.ca_p->link = yyvsp[-2].ca_p ;
  2374.                 yyval.ca_p->type = CA_EXPR  ;
  2375.                 yyval.ca_p->arg_num = yyvsp[-2].ca_p ? yyvsp[-2].ca_p->arg_num+1 : 0 ;
  2376.               }
  2377. break;
  2378. case 185:
  2379. #line 1015 "parse.y"
  2380. { yyval.ca_p = (CA_REC *) zmalloc(sizeof(CA_REC)) ;
  2381.                 yyval.ca_p->link = yyvsp[-2].ca_p ;
  2382.                 yyval.ca_p->arg_num = yyvsp[-2].ca_p ? yyvsp[-2].ca_p->arg_num+1 : 0 ;
  2383.  
  2384.                 code_call_id(yyval.ca_p, yyvsp[-1].stp) ;
  2385.               }
  2386. break;
  2387. case 186:
  2388. #line 1024 "parse.y"
  2389. { yyval.ca_p = (CA_REC *) zmalloc(sizeof(CA_REC)) ;
  2390.                 yyval.ca_p->type = CA_EXPR ;
  2391.               }
  2392. break;
  2393. case 187:
  2394. #line 1029 "parse.y"
  2395. { yyval.ca_p = (CA_REC *) zmalloc(sizeof(CA_REC)) ;
  2396.                 code_call_id(yyval.ca_p, yyvsp[-1].stp) ;
  2397.               }
  2398. break;
  2399. #line 2409 "y.tab.c"
  2400.     }
  2401.     yyssp -= yym;
  2402.     yystate = *yyssp;
  2403.     yyvsp -= yym;
  2404.     yym = yylhs[yyn];
  2405.     if (yystate == 0 && yym == 0)
  2406.     {
  2407. #if YYDEBUG
  2408.         if (yydebug)
  2409.             printf("yydebug: after reduction, shifting from state 0 to\
  2410.  state %d\n", YYFINAL);
  2411. #endif
  2412.         yystate = YYFINAL;
  2413.         *++yyssp = YYFINAL;
  2414.         *++yyvsp = yyval;
  2415.         if (yychar < 0)
  2416.         {
  2417.             if ((yychar = yylex()) < 0) yychar = 0;
  2418. #if YYDEBUG
  2419.             if (yydebug)
  2420.             {
  2421.                 yys = 0;
  2422.                 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
  2423.                 if (!yys) yys = "illegal-symbol";
  2424.                 printf("yydebug: state %d, reading %d (%s)\n",
  2425.                         YYFINAL, yychar, yys);
  2426.             }
  2427. #endif
  2428.         }
  2429.         if (yychar == 0) goto yyaccept;
  2430.         goto yyloop;
  2431.     }
  2432.     if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
  2433.             yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
  2434.         yystate = yytable[yyn];
  2435.     else
  2436.         yystate = yydgoto[yym];
  2437. #if YYDEBUG
  2438.     if (yydebug)
  2439.         printf("yydebug: after reduction, shifting from state %d \
  2440. to state %d\n", *yyssp, yystate);
  2441. #endif
  2442.     if (yyssp >= yyss + yystacksize - 1)
  2443.     {
  2444.         goto yyoverflow;
  2445.     }
  2446.     *++yyssp = yystate;
  2447.     *++yyvsp = yyval;
  2448.     goto yyloop;
  2449. yyoverflow:
  2450.     yyerror("yacc stack overflow");
  2451. yyabort:
  2452.     return (1);
  2453. yyaccept:
  2454.     return (0);
  2455. }
  2456.  
  2457. /********************************************
  2458. parse2.xc
  2459. copyright 1991, Michael D. Brennan
  2460.  
  2461. This is a source file for mawk, an implementation of
  2462. the Awk programming language as defined in
  2463. Aho, Kernighan and Weinberger, The AWK Programming Language,
  2464. Addison-Wesley, 1988.
  2465.  
  2466. See the accompaning file, LIMITATIONS, for restrictions
  2467. regarding modification and redistribution of this
  2468. program in source or binary form.
  2469. ********************************************/
  2470.  
  2471.  
  2472. /* $Log:    parse2.xc,v $
  2473. Revision 3.4.1.1  91/09/25  13:26:16  brennan
  2474. VERSION 1.0
  2475.  
  2476. Revision 3.4  91/06/28  04:19:26  brennan
  2477. VERSION 0.999
  2478.  
  2479. Revision 3.3  91/06/26  14:13:00  brennan
  2480. #ifdef YYBYACC was in the wrong spot
  2481.  
  2482. Revision 3.2  91/06/25  07:07:23  brennan
  2483. changed name to parse2.xc, so people won't try to compile it
  2484.  
  2485.  * Revision 3.1  91/06/07  10:28:05  brennan
  2486.  * VERSION 0.995
  2487.  * 
  2488.  * Revision 1.1  91/06/03  15:39:31  brennan
  2489.  * Initial revision
  2490.  * 
  2491. */
  2492.  
  2493. /* If using Berkeley yacc, we can put the parser table 
  2494.    memory to the zmalloc pool.  This is kind of ugly and
  2495.    with paged vm probably a nop, but for DOS and MINIX and ??
  2496.    it frees a considerably amount of memory.
  2497.  
  2498.    This file is part of parse.c via
  2499.       cat  y.tab.c  parse2.xc  > parse.c
  2500. */
  2501.  
  2502. static struct yacc_mem   yacc_mem[] = 
  2503. {
  2504. 0 , 0 ,  /* don't remove this */
  2505.  
  2506. #ifndef THINK_C
  2507. #ifdef   YYBYACC
  2508. (PTR) yycheck, sizeof(yycheck)/8,
  2509. (PTR) yytable, sizeof(yytable)/8,
  2510. (PTR) yyvs , sizeof(yyvs)/8,
  2511. (PTR) yyss, sizeof(yyss)/8,
  2512. (PTR) yydefred, sizeof(yydefred)/8,
  2513. (PTR) yydgoto, sizeof(yydgoto)/8,
  2514. (PTR) yygindex, sizeof(yygindex)/8,
  2515. (PTR) yylen, sizeof(yylen)/8,
  2516. (PTR) yylhs, sizeof(yylhs)/8,
  2517. (PTR) yyrindex, sizeof(yyrindex)/8,
  2518. (PTR) yysindex, sizeof(yysindex)/8,
  2519. #endif
  2520. #endif
  2521.  
  2522. 0,0 } ;
  2523.  
  2524. struct yacc_mem  *yacc_memp = yacc_mem ;
  2525.